类的加载和执行顺序

class Ali {
	private static int k = 0;
	private static Ali t3;
	private static Ali t1 = new Ali("t1");  
	private static Ali t2 = new Ali("t2");
	private static int i = print("i");
	static {
		print("静态块");
	}
	
	private static int n = 99;
	
	{
		print("构造块");
	}
		
	public Ali(String s) {
		System.out.println(++k + ":" + s + "   i:" + i + "   n:" + n);
	}

	private static int print(String s) {
		System.out.println(++k + ":" + s + "   i:" + i + "   n:" + n);
		n++;
		return ++i;
	}

	public static void main(String[] args) {
		Ali t = new Ali("init");
	}
}
1:构造块   i:0   n:0
2:t1   i:1   n:1
3:构造块   i:1   n:1
4:t2   i:2   n:2
5:i   i:2   n:2
6:静态块   i:3   n:3
7:构造块   i:4   n:99
8:init   i:5   n:100
    1) 先装载Cat.class 到内存中
    2) 静态成员初始化(静态代码块或静态属性) (只初始化一次)
    3) 普通成员默认初始化,构造块执行(它们两个是平级的)
    4) 构造函数执行
    5) 在堆上开辟内存空间,然后把栈上的引用指向堆
    Cat c;这个不会引起类中成员初始化
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值