• 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

  • 相关阅读:
    数论
    平衡树
    矩阵儿快速幂
    分治
    考试
    考试
    匈牙利算法
    SPFA
    倍增
    MySql 技术内幕 (数据库组成和引擎)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5036985.html
Copyright © 2020-2023  润新知