构造方法、this 关键字

构造方法

语法格式:【public】类名(【参数】){ }

  构造函数无返回值,不用写也不能写void,最多用public、protected、private修饰就可以了

  类的构造方法和普通方法一样可以进行重载。

普通方法是这样调用的:

  方法修饰符中有 static 的时候:类名.方法名(实参列表);

  方法修饰符列表中无 static 的时候:引用.方法名(实参列表);

构造函数的作用:

 1.创建对象依赖构造函数

  一个类没有手动写任何构造函数,也会有一个构造函数(默认的,隐式的,无参的),为了满足创建对象的依赖;
  一个类如果手动写了构造函数,就不会再生成那个(默认的,隐式的,无参的)构造函数了;
  一个类如果写了有参构造,建议把无参构造也写出来!

 2. 给属性初始化

public class Student {
    String stuID;
    String name;
public Student(){ System.out.println("我是无参构造。。。");} public Student(String stuID1,String name1){ stuID=stuID1; name=name1; } }
//---------------------------------------------------------
//无参构造也可以给属性初始化(了解即可!) public Student(){ stuID="0x112"; name="孙权"; }

设置带有参数的构造方法作用是为了给成员变量做初始化

使用有参构造方法来创建对象

这时我们试着去使用无参构造方法来创建对象,发现已经使用不了了

通过以上的测试,得出这样一个结论(这是java 中语法的规定,记住就行):当一个类没有显示的定义任何构造方法的时候,系统默认提供无参数构造方法,当显示的定义构造方法之后,系统则不再提供无参数构造方法。无参数构造方法又叫做缺省构造器,或者默认构造方法。

-------------------------------------------------------------

this关键词

this使用场景:

1.默认使用

package test;
public class java01 {
    String name;
    public void fun(){
        System.out.println(name);    //默认使用
        //System.out.println(this.name);
    }
}

 

2.有参构造对属性初始化,this.属性=属性
  set方法,this.属性=属性
  区分成员变量和局部变量,this不可省略!
3.构造函数之间相互调用使用 this(【实参】); 且必须放第一行

this:当前对象
类的非static方法中使用 this,表示当前对象,这个方法被哪个对象调用,this就是哪个对象!

 上面例子中,在fun()方法中使用了this,当p1调用fun()方法时,this就是指对象p1了。

  • this在构造函数之间的调用:

语法:this(【实参】);   必须在第一行! 

构造函数中没有递归,也不能相互调用,影响创建对象!

构造函数可以直接调用非构造函数!

public class Animal {
    public Animal(){
        this(20);    //调用 有参构造,必须放首行
        System.out.println("我是无参构造。。。");
    }   
    public Animal(int a){
        this.fun1();   //调用 非构造函数     
        System.out.println("我是有参构造。。。"+a);
    }
    public void fun1(){
        System.out.println("fun1...");
    }
}
//------------------------------------------------
package cn.bjpowernode.javase01.day10.thisdemo03;
public class TestAnimal {
    public static void main(String[] args) {
        Animal a1 = new Animal();
    }
}
执行结果:
  fun1...

  我是有参构造。。。20
  我是无参构造。。。
  • 构造函数之间调用的意义?

public class Cat {
    String name;
    int age;

    public Cat(){
//     this.name="咖啡猫";
//     this.age=3;
       this("咖啡猫",3);  //意义:无参构造去调用有参构造,提高代码的重复利用率!
    }

    public Cat(String name,int age){  //有参构造对属性初始化,this.属性=属性
        this.name=name;
        this.age=age;
    }
}
posted @ 2022-03-10 10:42  鹿先森JIAN  阅读(55)  评论(0编辑  收藏  举报