创建一个类的时候java的执行顺序

当我们创建在一个类的时候,java在做那些事情,顺序是什么

<span style="font-size:14px;">public class text {
	private int i=8;
	private int k=9;
	static int j=8;
	static {
		 j=8;
		 System.out.println(j);
	}
	public text(int k){
		this.k=k;
		System.out.println("k:2");
		System.out.println("2");
	}
	{
		i1=9;
		System.out.println("s");
//		s="sss";//错误,因为没有s这个变量。
	}
	private int i1=6;
	
//	{
//		i1=9;
//		System.out.println("s");
//	}
	public void printf(){
		System.out.println(this.i1);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		text t=new text(2);
		t.printf();
		text t1=new text(2);
		t1.printf();

	}

}
</span>

我们以这段代码来看,代码的执行结果如下

8
s
k:2
2
6
s
k:2
2
6

我们开启调试模式,一步步来看可以得出,当在第一次使用这个类来创建对象的时候,java还没有加载这个类,所以在一开始他是先加载这个类去执行这个类的初始化块,这个类的函数,创建类的对象,然后我们再根据这个类来创建对象。所以在一开始的时候。加载类-->创建类变量-->执行初始化代码块。

随后到了真正的创建对象。只要是创建对象,都是通过构造器来创建的。所以new 类()的时候,调试器跳到的第一句是对应的构造器,但是这个时候他只是在说我找到这个构造器了,并没有执行。随后java做了里面所有成员变量空间的创建,但是这个时候还没有赋值,执行的时候默认初始化,就是都是0。

随后开始执行代码块,这个时候我们说的初始化代码块,不仅仅是那些被{}在一起的代码块,前面的,对成员变量不通过构造器的赋值也是,所以我们可以认为他做了:

private int i;

{i=8;}的操作

所以这一部分是按照顺序执行的,所以我们会看到,要是我们把我们注释的那部分代码块解开注释,这个时候输出的就是:

2

9

在然后,才会执行构造器的东西。

然后再下一次的创建对象,因为类已经在加载过了,所以类的初始化块就不会再执行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值