Java构造方法知识整理

一、构造方法

如果需要创建对象的同时明确对象的属性值,需要使用构造方法来对这些属性值进行初始化操作。

二、创建对象的过程

1.声明一个对象,包括对象的名称和类型。

2.实例化对象,使用new关键字创建对象。

3.初始化赋值,在使用new关键字创建对象时,会自动调用构造方法初始化对象属性。

三、构造方法的特点

1.没有返回值,对象创建完,方法就执行结束。

2.构造方法的名称必须和类名一致。

3.类默认会有一个空参构造方法,如果我们手动添加了构造方法,那么就不会使用默认的构造方法。

4.创建一个对象,构造方法只执行一次。

5.构造方法可以被private修饰,不能创建该类对象。

6.构造方法不能被继承。

四、定义格式

修饰符 构造方法名(参数列表){
    
}

例:

public class Demo_1 {

    //空参构造方法
    public Demo_1(){
        System.out.println("调用了空参构造方法!");
    }

}
//定义测试类
class Test{
    public static void main(String[] args){
        //创建对象
        Demo_1 d1 = new Demo_1();
    }
}

有参构造方法,例:

public class Demo_1 {

    //成员变量
    private int a;
    private int b;

    //空参构造方法
    public Demo_1(){
        System.out.println("调用了空参构造方法!");
    }
    //有参构造方法,初始化成员,this表示当前对象,用于区分成员变量和局部变量同名
    public Demo_1(int a,int b){
        this.a = a;
        this.b = b;
        System.out.println(this.a);
        System.out.println(this.b);

        System.out.println("调用了有参构造方法!");
    }

}
//定义测试类
class Test{
    public static void main(String[] args){
        //创建对象,调用有参构造方法,初始化赋值
        Demo_1 d1 = new Demo_1(10,20);

    }
}

五、构造方法之间的调用

在一个构造方法中,想要使用另一个构造方法,使用this关键字调用。此调用方式this语句必须在构造方法的第一句。

例:

public class Demo_2 {
    //成员变量
    private int a;
    private int b;

    //空参构造
    public Demo_2(){
        //调用另一个构造方法来初始化赋值
        this(10,20);
        System.out.println("调用了空参构造方法!");
    }
    //有参构造
    public Demo_2(int a , int b) {
        this.a = a;
        this.b = b;
        System.out.println(this.a);
        System.out.println(this.b);
        System.out.println("调用了有参构造方法!");
    }
}
//定义测试类
class Test_2{
    public static void main(String[] args){
        //创建对象
       Demo_2 d2 = new Demo_2();

    }
}

六、继承关系中构造方法的调用

创建子类对象时,会先执行父类的构造方法,因为子类当中所有的构造方法默认的第一条语句为super(); (也必须是第一条语句)会调用父类的空参构造方法。如果要调用父类中的有参构造方法,要使用super(实参列表)显示调用。如果父类中没有空参构造方法,在子类的所有构造方法中必须显示调用。如果父类中有多个构造方法,在子类的构造方法中任意调用一个就行。

注意:this()与super()不能同时存在。使用了this()调用了本类的其他构造方法,相当于在被调用的其他的构造方法中使用了super()。

总结:子类中的所有构造方法,必须能调用到父类的构造方法。(直接调用或间接调用)

例:

//定义父类
public class Father {

    //父类中的空参构造方法
    public Father(){
        System.out.println("我是父类中的空参构造方法!");
    }
}
//创建子类,继承父类
class Son extends Father{

    //子类空参构造方法
    public Son(){
        //super();  默认会添加
        System.out.println("我是子类中的空参构造方法!");
    }
}
//定义测试类
class Test_3{
    public static void main(String[] args){
        //创建子类对象
        new Son();
    }
}

猜你喜欢

转载自blog.csdn.net/u012430402/article/details/81183005