1. 程式人生 > >Java變數和(靜態)程式碼塊的執行

Java變數和(靜態)程式碼塊的執行

本文討論Java中(靜態)變數、(靜態)程式碼塊的執行順序

首先建立3個類:

1、Foo類,用於列印變數

     public class Foo {

            public Foo(String word) {

                System.out.println(word);
            }
        }

2、Parent類

        public class Parent {             static Foo FOO = new Foo("Parent's static parameter");                          Foo foo = new Foo("Parent's parameter");                          static {                 System.out.println("Parent's static code block");             }                          {                 System.out.println("Parent's code block");             }                          public Parent() {                 System.out.println("Parent.Parent()");             }         }

3、Child類

                public  class Child extends Parent{                     static Foo FOO = new Foo("Child's static parameter");                                          Foo foo = new Foo("Child's parameter");

                    static {                         System.out.println("Child's static code block");                     }                                          {                         System.out.println("Child's code block");                     }                                          public Child() {                         System.out.println("Child.Child()");                     }                 }

接下來執行例項:

        public class Run {             public static void main(String[] args) {                 new Child();             }         }

列印結果:

    Parent's static parameter
    Parent's static code block
    Child's static parameter
    Child's static code block
    Parent's parameter
    Parent's code block
    Parent.Parent()
    Child's parameter
    Child's code block
    Child.Child()

總結

   java中的靜態變數和靜態程式碼塊是在類載入的時候就執行的,例項化物件時,先宣告並例項化變數再執行建構函式。如果子類繼承父類,則先執行父類的靜態變數和靜態程式碼塊,再執行子類的靜態變數和靜態程式碼塊。同樣,接著在執行父類和子類非靜態程式碼塊和建構函式。

    注意:(靜態)變數和(靜態)程式碼塊的也是有執行順序的,與程式碼書寫的順序一致。在(靜態)程式碼塊中可以使用(靜態)變數,但是被使用的(靜態)變數必須在(靜態)程式碼塊前面宣告。

     最後給出執行步驟:

    1、父類靜態變數和靜態程式碼塊(先宣告的先執行);

    2、子類靜態變數和靜態程式碼塊(先宣告的先執行);

    3、父類的變數和程式碼塊(先宣告的先執行);

    4、父類的建構函式;

    5、子類的變數和程式碼塊(先宣告的先執行);

    6、子類的建構函式。