標籤:代碼 art blog sys bsp http oar strong 初始化
下面聲明類看看測試結果:
[java] view plain copy
- package com.shareniu;
-
-
- public class HelloA {
- {
- System.out.println("before class HelloA");
- }
- public HelloA() {
- System.out.println("HelloA");
- }
-
- static{
- System.out.println("static HelloA");
- }
- {
- System.out.println("after class HelloA");
- }
- }
- public class HelloB extends HelloA {
- private int i;
- public HelloB() {
- System.out.println("HelloB");
- }
- {
- System.out.println(i);
- System.out.println(" before class HelloB");
- }
- {
- System.out.println("after class HelloB");
- }
- static{
- System.out.println("static HelloB");
- }
- public static void main(String[] args) {
- new HelloB();
- System.out.println("shareniu");
- new HelloB();
- }
輸出的結果是什麼呢?
[java] view plain copy
- static HelloA
- static HelloB
- before class HelloA
- after class HelloA
- HelloA
- 0
- before class HelloB
- after class HelloB
- HelloB
- shareniu
- before class HelloA
- after class HelloA
- HelloA
- 0
- before class HelloB
- after class HelloB
- HelloB
1.1.1.
總結
1.執行個體化類對象的時候,先執行個體化父類的靜態方法,再執行個體化子類的靜態方法,而且只會執行一次。
2.靜態塊的代碼的優先順序是最高的。
3.先初始化父類的代碼塊,再執行父類的構造方法。繼續初始化自己的代碼塊,再執行自己的構造方法。
4.代碼塊是優先於構造方法執行的。這裡就是類對象初始化的2次構造機製造成的。先執行代碼塊初始化所有的變數資訊,構造方法執行的時候,如果有變數的賦值,就去再次初始化已經修改的值的記憶體。
5.永遠都是先載入父類,在載入子類。先載入static的,在載入類對象的變數資訊。
6.代碼塊{}的執行順序,從上而下執行。
Java類載入機制(僅作記錄)