一道题明白类的加载和对象的初始化顺序

                               

public class Lei {
		private static int n=num1();
		private static int m=2;
		private int k=num2();
		private int h=8;	
		//类的加载和对象的初始化顺序:1.Lei一加载,有了两个属性,n,m,默认初始值都为0,
		//并对n,m进行了静态的声明初始化,执行num1(): 输出m:0,    此时m=2;n=1;
		//2.接着执行静态代码块(static{})          输出m:2    此时 m=3,仅执行一次   -----类的加载完毕
		
		//执行主函数:fun(),执行new Lei():此时n=1,m=3,对象又有了两个属性k n:k=0,h=0
		//对k,h进行声明初始化:执行num2(): 输出0,此时k=1;h=8;
		//执行构造代码块:              输出h:8   此时h=9    创建一次对象执行一次,在创建对象的时候才调用
		//执行构造函数 :               输出mh:39
		
		//再次创建对象同上:输出0839
		//结果为:0208390839
		static{
			System.out.println("b:"+m);
			m=3;
		}	
		static void fun(){} 		
		{
			System.out.println(h);	
			h=9;
		 }
		Lei(){
			System.out.print(m);
			System.out.println(h);
		      }
		int num2() {
			System.out.println("c:"+h);
			return 1;
		       }
		static int num1() {
			System.out.println("a:"+m);
			return 1;
		       }
		public static void main(String[] args) {
			fun();
			new Lei();
			new Lei();	
		   }
	
}

里面的abc是我标记用的

 

输出结果为:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值