Java类的构造顺序

1.无对象构造

 

public class Test {    
	  
	
	public static int k = 0;     
	public static int n = 99;           

	public static int i = print("i"); 
	static {           
		print("静态块");       
		} 
	
	
	{          
		print("构造块");       
	} 
	public int j = print("j");   	

	public Test(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);          
		++i;           
		++n;       
	}    
	
	public static int print(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i +" n=" + n);          
		++n;           
		return ++i;           
	}      
	
	public static void main(String[] strings) {           
		   
	}   
	
}



在加载类的时候构造静态变量和静态代码块。

顺序按照定义的顺序。

 

结果为:

1:i i=0 n=99
2:静态块 i=1 n=100

 

 

 

2.main函数中构造对象

 

public class Test {    
	  
	
	public static int k = 0;     
	public static int n = 99; 
	          

	public static int i = print("i"); 
	static {           
		print("静态块");       
		} 
	
	
	{          
		print("构造块");       
	} 
	public int j = print("j");   	

	public Test(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);          
		++i;           
		++n;       
	}    
	
	public static int print(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i +" n=" + n);          
		++n;           
		return ++i;           
	}      
	
	public static void main(String[] strings) {           
		Test t = new Test("init");       
	}   
	
}



前两条同上。

在构造对象时,先构造对象里的非static变量,再调用构造函数。

非static类的变量按定义的顺序构造。

 

结果为:

1:i i=0 n=99
2:静态块 i=1 n=100
3:构造块 i=2 n=101
4:j i=3 n=102
5:init i=4 n=103

 

 

3.类中含static对象

 

public class Test {    
	  
	
	public static int k = 0;     
	public static int n = 99; 
	public static Test t1 = new Test("t1");       
	
          

	public static int i = print("i"); 
	static {           
		print("静态块");       
		} 
	
	
	{          
		print("构造块");       
	} 
	public int j = print("j");   
	
	public static Test t2 = new Test("t2"); 

	public Test(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);          
		++i;           
		++n;       
	}    
	
	public static int print(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i +" n=" + n);          
		++n;           
		return ++i;           
	}      
	
	public static void main(String[] strings) {           
		Test t = new Test("init");       
	}   
	
}




 

static类型变量、对象、代码块按定义的顺序构造。

构造static对象时候,因为是构造对象所以同2所述,先构造非static变量,在调用构造函数。

 

结果:

1:构造块 i=0 n=99
2:j i=1 n=100
3:t1 i=2 n=101
4:i i=3 n=102
5:静态块 i=4 n=103
6:构造块 i=5 n=104
7:j i=6 n=105
8:t2 i=7 n=106
9:构造块 i=8 n=107
10:j i=9 n=108
11:init i=10 n=109

 

 

4.static变量初始化

 

public class Test {    
	  
	
	public static int k = 0;     
	
	public static Test t1 = new Test("t1");       
	
          

	public static int i = print("i"); 
	public static int n = 99; 
	static {           
		print("静态块");       
		} 
	
	
	{          
		print("构造块");       
	} 
	public int j = print("j");   
	
	public static Test t2 = new Test("t2"); 

	public Test(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);          
		++i;           
		++n;       
	}    
	
	public static int print(String str) {           
		System.out.println((++k) + ":" + str + " i=" + i +" n=" + n);          
		++n;           
		return ++i;           
	}      
	
	public static void main(String[] strings) {           
		Test t = new Test("init");       
	}   
	
}




 




 先默认初始化再进行赋值。

 

结果:

1:构造块 i=0 n=0
2:j i=1 n=1
3:t1 i=2 n=2
4:i i=3 n=3
5:静态块 i=4 n=99
6:构造块 i=5 n=100
7:j i=6 n=101
8:t2 i=7 n=102
9:构造块 i=8 n=103
10:j i=9 n=104
11:init i=10 n=105

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值