写在前面,面向对象有三大特征:

1.封装
2.继承
3.多态

今天我们来简单学习一下java的第一大特征封装

封装

  1. 概念
    将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
    封装有:
    属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装…
  2. 好处
    1、模块化
    2、信息隐藏
    3、代码重用
    4、插件化易于调试
    5、具有安全性

类的封装

  • 类的封装,就是将类中的属性私有化,即用private关键字来修饰。
    私有属性只能在它所在的类中被访问。
  • 在其他类中要间接访问
    要通过提供的方法实现对信息的操作和访问getXxx()/setXxx()
    1.getXxx():专门用于向变量设置数据(无参数)(拿出来
    2. setXxx():专门私语获取变量的数据 (有参数)(放进去
    注意:参数为boolean类型时setXxx不变,getXxx要变成isXxx
  • java中的this关键字,this关键字代表当前对象
    this.属性:操作当前对象的属性
    this.方法:调用当前对象的方法

属性的封装

//以person为对象构造setter和getter
//以及this的使用
public class person {
    
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
    
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

封装时,我们还可以控制输入的数据的范围。
以上面为例,一个人的年龄即不可能为负也不可能超过120(一般情况),所以我们在获取年龄时就可以限定一个范围。

//j这样我们不仅保护数据的私密,也保证数据的正确
public void setAge(int age) {
        if(age>=0&&age<=120){
            this.age = age;
        }else{
            System.out.println("您输入的年龄有误");
        }
    }

构造方法

构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。

//成员方法无static
public 类名称{
	修饰符 类名称(参数){
	}
}

注意事项:
1、构造方法的名称必须和所在类名称完全一样,就连大小写也要一样
2、构造方法不要写返回值类型,连void也不写
3、构造方法不能return一个具体返回值
4、如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么也不做
推荐:无论怎样都自己手动写一个
5、一旦编写了至少一个构造方法,那么编译器将不在赠送
6、构造方法也是可以进行重载的(重载)方法名称相同,参数列表不同

完整代码:

public class person {

    private int age;
    private String name;

    public person()
    {
        System.out.println("无参的构造方法");
    }

    public person(int age, String name) {
        System.out.println("有参的构造方法");
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age>=0&&age<=120){
            this.age = age;
        }else{
            System.out.println("您输入的年龄有误");
        }

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}