java初始化顺序-this-构造方法

本文深入探讨了Java构造方法的基本概念及使用方式,包括构造方法如何被自动创建、构造方法之间的调用限制,以及如何通过关键字this引用当前实例。此外,还介绍了Java中对象初始化的顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java构造方法

Java文件中,每个类都有一个构造方法,例如:

 

package j2se.obj.demo;

 

public class UserInfo {

}

 

在这个文件中,没有看到构造方法,但是虚拟机会自动填上构造方法:public UserInfo(){}

 

package j2se.obj.demo;

 

public class UserInfo {

public UserInfo(){

}

}

若写上构造方法之后,虚拟机便不会自动填上构造方法,以写上的构造方法为准。

方法名字相同,则根据传入参数决定调用哪个方法。

构造方法之间不能相互调用,否则会产生无限循环。

 

 

关键字this

this代表的是实例化的对象。例如:

package j2se.obj.constructs;

 

public class UserInfo extends Human{

 

    private Integer id;

    private String name;

    private Integer age;

    public Integer getId() {

        return id;

    }

    public void setId(Integer id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public Integer getAge() {

        return age;

    }

    public void setAge(Integer age) {

        this.age = age;

    }

   

    /*public UserInfo(){

       

    }*/

   

    public UserInfo(String name){

        //this(11);

        //不能相互调用

        this.name = name;

        System.out.println("UserInfo(String name)");

    }

    public UserInfo(Integer age){

        this("mike");

        //super();

        //调用构造方法的代码,只能写在第一行

        System.out.println("UserInfo(Integer age)");

    }

}

 

若在别处实例化一个UserInfo对象

UserInfo 张三 = new UserInfo();

则表示this代表的是张三。

 

Java初始化顺序

 

父类文件:

 

package j2se.obj.instances;

 

public class Father {

    int a=1;

    static int b=2;

    {

        System.out.println("father-a=="+a);

        System.out.println("father-b=="+b);

    }

    static{

        //System.out.println("a=="+a);

        System.out.println("father-static-b=="+b);

    }

    public Father(){

        System.out.println("father-构造方法-a=="+a);

        System.out.println("father-构造方法-b=="+b);

    }

}

 

子类文件:

 

package j2se.obj.instances;

 

public class Son extends Father{

 

 

    int a=1;

    static int b=2;

   

    //初始化块

    {

        System.out.println("son-a=="+a);

        System.out.println("son-b=="+b);

    }

    static{

        //System.out.println("a=="+a);

        System.out.println("son-static-b=="+b);

    }

    public Son(){

        System.out.println("son-构造方法-a=="+a);

        System.out.println("son-构造方法-b=="+b);

    }

 

}

 

测试文件:

 

package j2se.obj.instances;

 

public class MyTest {

 

   

    public static void main(String[] args) {

        new Son();

 

    }

 

}

 

运行此程序得到的结果是:

 

father-static-b==2

son-static-b==2

father-a==1

father-b==2

father-构造方法-a==1

father-构造方法-b==2

son-a==1

son-b==2

son-构造方法-a==1

son-构造方法-b==2

 

由此可以看出:

1.  变量b和变量a在初始化块之前已经初始化。

2.  先初始化的是父类静态块,再父类构造方法,然后才初始化子块,子类构造方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值