1. 程式人生 > >當沒有繼承關係時,靜態塊、靜態方法、非靜態方法、構造方法、普通方法的執行順序

當沒有繼承關係時,靜態塊、靜態方法、非靜態方法、構造方法、普通方法的執行順序

<span style="font-size:18px;">package test;
/**
 * 不含有繼承時,各種方法(靜態塊,靜態方法,非靜態程式碼塊,構造方法,普通方法)的執行順序 
 *
 */
    public class uExtend {  
        public static void test(){
                System.out.println("靜態方法");  
            }
        static {  
            System.out.println("靜態程式碼塊");  
        }  

        public uExtend() {  
            System.out.println("建構函式");  
        }  

        {  
            System.out.println("非靜態程式碼塊");  
        }  
         public void method1() {  
            System.out.println("普通方法");  
        }  

        public static void main(String[] args) {  
            uExtend.test();
            new uExtend().method1();



        }  
    }  


執行結果:

靜態程式碼塊

靜態方法

非靜態程式碼塊

建構函式

普通方法

總結:

執行靜態塊中的內容,其次判斷是否有靜態方法在new uExtend()之前執行,如果有的話,就先執行靜態方法(在執行構造方法之前先執行靜態方法),否則直接執行非靜態程式碼塊之後執行構造方法

如果new uExtend()方法位置在呼叫靜態方法之前,則靜態方法在執行完構造方法(new uExtend())之後再呼叫。