详述Java的对象初始化过程

Java程序运行一旦创建了类,对象的存在就显得理所当然了,那么当我们在Java程序中创建一个新的对象的时候,计算机是如何给新对象初始化的呢?本片就详述Java中对象的初始化进程。

先读一串代码:

public class Test {
	
	
	private String name;
	
	{
		System.out.println(this.name);
	}
	
	public Test(String name) {
		this.name = name;
		System.out.println(this.name);
	}
	
	public static void main(String[] args) {
		new Test("Tom");
	}
}

运行结果:

问题出来了,为什么第一个是null?不应该两个都是Tom吗?接下来我会解释

之前的博客说过,非静态代码块在创建新对象时执行,也就是说,当你声明创建一个新的对象的指令被读取到时,非静态代码块就运行了,因为name是一个全局变量,之前的博客也说过,全局变量有默认初始值,String类型默认为null。这就是为什么第一行的输出为null。这就是对象初始化的第一个步骤:1.–给对象的实例变量分配空间,默认初始化成员变量

那么问题来了,如果我在非静态代码块里给成员变量赋值呢?那么改写上方代码:

public class Test {
	
	
	private String name = "Jim";
	
	{	
		System.out.println(this.name);
	}
	
	public Test(String name) {
		this.name = name;
		System.out.println(this.name);
	}
	
	public static void main(String[] args) {
		new Test("Tom");
	}
}

声明成员变量时给name赋初值,再看运行结果:


      第一行的输出变成了Jim,程序将声明的初始值初始值给了name,这就是Java中对象初始化过程的的第二步:2.成员变量声明时的初始化。

再改写代码:

public class Test {
	
	
	private String name="Jim";
	
	{	
		System.out.println("第二步"+":"+this.name);
		this.name = "sam"; 
		System.out.println("第三步"+":"+this.name);
	}
	
	public Test(String name) {
		this.name = name;
		System.out.println("第四步"+":"+this.name);
	}
	
	public static void main(String[] args) {
		new Test("Tom");
	}
}

 结果如下图:

 观察到结果,可知计算机先根据声明给name赋初值,再按代码块赋值,接着按构造方法赋值,这就是Java对象初始化过程的第三步和第四步:3.–初始化块初始化4.–参构造方法初始化

综上,可知Java对象的初始化过程分为上述四步:

–给对象的实例变量分配空间,默认初始化成员变量

–成员变量声明时的初始化

–初始化块初始化

–参构造方法初始化

以上,就是对Java对象初始化过程的详述。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值