91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java類初始化時機測試方法是什么

發布時間:2020-08-13 11:32:59 來源:億速云 閱讀:183 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Java類初始化時機測試方法是什么的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

<clinit>()方法

Java 類加載的初始化過程中,編譯器按語句在源文件中出現的順序,依次自動收集類中的所有類變量的賦值動作和靜態代碼塊中的語句合并產生方法。 如果類中沒有靜態語句和靜態代碼塊,那可以不生成<clinit>() 方法。

并且 <clinit>() 不需要顯式調用父類(接口除外,接口不需要調用父接口的初始化方法,只有使用到父接口中的靜態變量時才需要調用)的初始化方法 <clinit>(),虛擬機會保證在子類的 <clinit>() 方法執行之前,父類的 <clinit>() 方法已經執行完畢(所以java.lang.Object 類總是第一個被加載)

Java類初始化時機測試方法是什么

準備父類和子類

class Father {

  static int father_a = 1;

  static {
    System.out.println("父類靜態代碼塊執行");
  }

  static class StaticInnerClass {
    static {
      System.out.println("靜態內部類靜態代碼塊執行");
    }
  }
}

class Son extends Father {

  static {
    System.out.println("子類靜態代碼塊執行");
    son_a = 300;
  }

  static int son_a = 100;
  static final int M = 1;
}

Main方法:

1:父類沒有被引用但是會被先加載

new Son();

Java類初始化時機測試方法是什么

2:反射也會產生主動引用:

Class a = Class.forName("clinit.Son");

(運行結果同1)

3:子類使用父類靜態變量或方法不會產生類的引用

System.out.println("Father.a = " + Son.father_a);

Java類初始化時機測試方法是什么

4:通過類創建數組不會加載類(只是開辟一塊空間)

Son[] sons = new Son[8];

Java類初始化時機測試方法是什么

5:使用常量不會加載父類和之類(常量在Linking階段就保存在常量池當中了)

System.out.println("Son.CONST = " + Son.CONST);

Java類初始化時機測試方法是什么

6:引用靜態內部類不會加載外部類(應用于單例模式)

new Father.StaticInnerClass();

Java類初始化時機測試方法是什么

代碼總結:

public static void main(String[] args) throws Exception {

//    1.父類沒有被引用但是會被先加載
//    new Son();
//    2.反射會產生主動引用
//    Class a = Class.forName("clinit.Son");
//    3.子類使用父類靜態變量或方法不會產生類的引用
//    System.out.println("Father.a = " + Son.father_a);
//    4.通過類創建數組不會加載類(只是開辟一塊空間)
//    Son[] sons = new Son[8];
//    5.使用常量不會加載父類和之類(常量在Linking階段就保存在常量池當中了)
//    System.out.println("Son.CONST = " + Son.CONST);
//    6.引用靜態內部類不會加載外部類(應用于單例模式)
//    new Son.StaticInnerClass();
  }
}

PS:由于是按出現的順序執行的,為了避免不必要的麻煩,應盡量把靜態變量寫在靜態代碼塊之前

public class Test {
  public static void main(String[] args) {
    System.out.println("a = " + cls.a);
  }
}
class cls {
  static int a = 10;8   static { a = 20; }9 }

Java類初始化時機測試方法是什么

如果 調換順序輸出結果將是 a = 10

 class cls {
   static { a = 20; }
   static int a = 10;
 }

Java類初始化時機測試方法是什么

感謝各位的閱讀!關于Java類初始化時機測試方法是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

重庆市| 彭山县| 西畴县| 汨罗市| 新津县| 静乐县| 石柱| 射阳县| 阿拉尔市| 泰宁县| 巴东县| 平凉市| 太谷县| 浏阳市| 紫金县| 孟连| 木兰县| 简阳市| 横山县| 佛教| 丰原市| 忻州市| 苏尼特右旗| 霍林郭勒市| 绩溪县| 新闻| 乌鲁木齐县| 深水埗区| 高要市| 大庆市| 许昌县| 宁晋县| 建水县| 长汀县| 个旧市| 全南县| 南涧| 兴城市| 汤阴县| 银川市| 余江县|