<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### [類字面常量](https://lingcoder.gitee.io/onjava8/#/book/19-Type-Information?id=%e7%b1%bb%e5%ad%97%e9%9d%a2%e5%b8%b8%e9%87%8f) Java 還提供了另一種方法來生成類對象的引用:**類字面常量**。對上述程序來說,就像這樣:`FancyToy.class;`。這樣做不僅更簡單,而且更安全,因為它在編譯時就會受到檢查(因此不必放在`try`語句塊中)。并且它根除了對`forName()`方法的調用,所以效率更高。 類字面常量不僅可以應用于普通類,也可以應用于接口、數組以及基本數據類型。另外,對于基本數據類型的包裝類,還有一個標準字段`TYPE`。`TYPE`字段是一個引用,指向對應的基本數據類型的`Class`對象,如下所示: | ...等價于... | | --- | | boolean.class | Boolean.TYPE | | char.class | Character.TYPE | | byte.class | Byte.TYPE | | short.class | Short.TYPE | | int.class | Integer.TYPE | | long.class | Long.TYPE | | float.class | Float.TYPE | | double.class | Double.TYPE | | void.class | Void.TYPE | 我的建議是使用`.class`的形式,以保持與普通類的一致性。 注意,有一點很有趣:當使用`.class`來創建對`Class`對象的引用時,不會自動地初始化該`Class`對象。為了使用類而做的準備工作實際包含三個步驟: 1. **加載**,這是由類加載器執行的。該步驟將查找字節碼(通常在 classpath 所指定的路徑中查找,但這并非是必須的),并從這些字節碼中創建一個`Class`對象。 2. **鏈接**。在鏈接階段將驗證類中的字節碼,為`static`字段分配存儲空間,并且如果需要的話,將解析這個類創建的對其他類的所有引用。 3. **初始化**。如果該類具有超類,則先初始化超類,執行`static`初始化器和`static`初始化塊。 直到第一次引用一個`static`方法(構造器隱式地是`static`)或者非常量的`static`字段,才會進行類初始化。 ~~~ // typeinfo/ClassInitialization.java import java.util.*; class Initable { static final int STATIC_FINAL = 47; static final int STATIC_FINAL2 = ClassInitialization.rand.nextInt(1000); static { System.out.println("Initializing Initable"); } } class Initable2 { static int staticNonFinal = 147; static { System.out.println("Initializing Initable2"); } } class Initable3 { static int staticNonFinal = 74; static { System.out.println("Initializing Initable3"); } } public class ClassInitialization { public static Random rand = new Random(47); public static void main(String[] args) throws Exception { Class initable = Initable.class; System.out.println("After creating Initable ref"); // Does not trigger initialization: System.out.println(Initable.STATIC_FINAL); // Does trigger initialization: System.out.println(Initable.STATIC_FINAL2); // Does trigger initialization: System.out.println(Initable2.staticNonFinal); Class initable3 = Class.forName("Initable3"); System.out.println("After creating Initable3 ref"); System.out.println(Initable3.staticNonFinal); } } ~~~ 輸出結果: ~~~ After creating Initable ref 47 Initializing Initable 258 Initializing Initable2 147 Initializing Initable3 After creating Initable3 ref 74 ~~~ 初始化有效地實現了盡可能的“惰性”,從對`initable`引用的創建中可以看到,僅使用`.class`語法來獲得對類對象的引用不會引發初始化。但與此相反,使用`Class.forName()`來產生`Class`引用會立即就進行初始化,如`initable3`。 如果一個`static final`值是“編譯期常量”(如`Initable.staticFinal`),那么這個值不需要對`Initable`類進行初始化就可以被讀取。但是,如果只是將一個字段設置成為`static`和`final`,還不足以確保這種行為。例如,對`Initable.staticFinal2`的訪問將強制進行類的初始化,因為它不是一個編譯期常量。 如果一個`static`字段不是`final`的,那么在對它訪問時,總是要求在它被讀取之前,要先進行鏈接(為這個字段分配存儲空間)和初始化(初始化該存儲空間),就像在對`Initable2.staticNonFinal`的訪問中所看到的那樣。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看