zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    LeetCode 1110. Delete Nodes And Return Forest
    LeetCode 473. Matchsticks to Square
    LeetCode 886. Possible Bipartition
    LeetCode 737. Sentence Similarity II
    LeetCode 734. Sentence Similarity
    LeetCode 491. Increasing Subsequences
    LeetCode 1020. Number of Enclaves
    LeetCode 531. Lonely Pixel I
    LeetCode 1091. Shortest Path in Binary Matrix
    LeetCode 590. N-ary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5036985.html
Copyright © 2011-2022 走看看