一、权限修饰符:private、缺省的、protected、public
  1. 本类中可以使用:private、缺省的、protected、public
    比如:定义的某个类中,某个变量如name是private的,但是该类中的set/get方法是public的,可以获取这个值并被其他类调用,所以这个private的值其实本质上,是可以被公开的——这合理嘛?好吧,就是这么设置的。
  2. 本包中(同一个包,不同类):缺省的、protected、public
  3. 不同包的子类:protected、public
  4. 不是同一个包,也不是子类:public

⭐封装性:

a.为什么要使用封装性?

当我们创建对象以后,可以通过 ”对象名.属性名“ 的方式对属性进行赋值。这种方式默认只能对内容的类型和范围进行约束。但在实际开发中我们往往还会遇到更多的限制条件,但这些限制条件无法在属性的声明处加以限制。所以我们采用如下方式:

  1. 使用 private 修饰属性,这样就不能使用 ”对象名.属性名“ 的方式进行赋值了;
  2. 提供公共的方法(get、set)给属性赋值和获取属性值,这样可以在方法中对赋值的内容加以限制。
b.封装性的体现:
  1. 狭义上:
    私有化属性,同时提供公共的set/get方法;
  2. 广义上:
    用四种权限修饰符来修饰:属性、方法、构造器、内部类。(不能修饰代码块。)
    注意:类只能使用public和缺省的来修饰。
二、⭐构造器/构造方法(constructor——创建对象必调构造器
a.作用
  1. 创建对象:即标准语句:Animal animal = new Animal( );
  2. 对对象进行初始化

b.格式

权限修饰符 类名(形参列表){

执行语句;

}

说明:

  1. 如果在类中没有显式提供构造器 ,那么系统会默认提供一个空参的构造器;我们创建对象常规时就是调用这个默认空参的构造器。
  2. 如果在类中自定义了显式构造器,那么系统将不再提供那个默认的空参构造器。
  3. 构造器可以有多个,彼此之间构成重载。
c.总结
  1. 创建对象必调构造器;
  2. 构造器的特点:同一个对象只能调用一次。
  3. 构造器使用场景:创建对象;给对象进行初始化;在对象中只执行一次的代码放在构造器中。
class Animal{
    String name;
    int age;
    
    //构造器
    public Animal(){
        System.out.println("constructor");
        
    }
    
    public void info(){
        System.out.println("name=" + name, " age=" + age);
    }
}

public class ConstructorTest{
    
    public static void main(String[] args){
        //思考:如何调用构造器?——这个默认语句就是用来创建对象的构造器。
        Animal animal = new Animal();
        
    }
}
三、⭐JavaBean
a.定义:一种Java语言写成的【可重用组件】

JavaBean就是一个普通的类;但拥有如下特点:

  1. 类是公共的——public
  2. 有一个无参的 public 的构造器
  3. 有属性,且有对应的get/set方法
b.要点:JavaBean的对象用来——存数据——与前端web交互、后端数据库存储。
public calss JavaBean{ //满足条件1
    
    private String name;
    private int age;
    public JavaBean(){ //满足条件2
        
    }
    
    public JavaBean(String n, int a){
        name = n;
        age = a;
    }
    
    public void setName(String n){ //满足条件3
        name = n;
    }
    public String getName(){
        return name;
    }
    
}
public class JavaBeanTest{
    public static void main(String[] args){
        //思考:如何调用构造器?——这个默认语句就是用来创建对象的构造器。
        Animal animal = new Animal();

    }
}
四、this关键字

含义:用来表示当前对象。

this可以调用属性、方法、构造器。

当this调用属性时:
  1. 在构造器和方法中我们可以直接调用属性,往往是默认省略了 this (实际上有,只是我们看不到)。
  2. 当局部变量和属性名一样时,就必须使用 this.属性名 来进行区分属性和局部变量。
当this调用方法时:

在同一个类中方法可以互相调用,调用时往往省略this;

当this调用构造器时:

构造器之间也可以相互调用!

  1. 格式:this(形参列表)
  2. 作用:调用本类中的其他构造器
  3. 说明:
  1. this(形参列表)必须在构造器的首行;
  2. 在同一个构造器中最多只能有一个this(形参列表);
  3. 如果有 N 个构造器,那么最多只能有 N-1 个 this(形参列表)——不然会形成死循环(彼此调用成圈圈
  1. 举例:需求:Cat类中有三个不同形参的构造器,要求无论使用哪种构造器,都必须输出“我真好看”
class Cat{
    String name;
    int age;
    
    //public void setName(String n){ //n指代不明,设置为name最好,但是与类内属性冲突
    	//思考?这里使用的是局部变量还是属性?——根据就近原则,name是局部变量。
    //    name = n;
    //}
    public void setName(String name){
        // this.name 表示这个name是属性的name,不是传参的局部变量,所以可以完成对 属性 的赋值。
        this.name = name; 
        
        //this也是地址值
        System.out.println(this); // 这个地址和下面33行输出的那个地址值相同,代表指向同一个对象;
    }
    
    //this构造器使用举例:
    public Cat(){
        System.out.println("我真好看");
    }
    public Cat(int age){
        this(); //相当于调用第19行的构造器。——且这行语句必须在21行这个构造器的首行!!!
    }
    public Cat(String name, int age){
        this();
    }
}

public class ThisTest{
    public static void main(String[] args){
        Cat cat = new Cat();
        //cat对象
        System.out.println(cat);//输出的是 cat 在java内存中的地址值;
        
        cat.setName("miao");
    }
}