<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國際加速解決方案。 廣告
                [TOC] # 1、概念: ## 1.1類的加載階段 ![](https://box.kancloud.cn/d0aa6f298ae286faf5037cbf31afe3c8_608x236.png) 使用某類時,如果類還沒有加載到內存,則系統會**加載**、**連接**、**初始化**三個步驟對類進行初始化。通常由jvm完成這三個步驟。這三個步驟統稱為類加載或類初始化。 > **1、將類的class文件讀入內存,并為之創建一個java.lang.Class對象。** 也就是說使用一個類時,都會先進行一次(且只有一次)類的加載。 > 2、類的加載由加載器完成,加載器通常由jvm提供 ### 1.1.2 類加載源 可以通過以下文件加載: 1. class文件 2. jar文件 3. 通過網絡加載class文件 4. 動態編譯java源文件,并加載 ### 1.1.3 類: > 類,是一類對象的抽象,是一個概念層次上的東西,但是java中一切皆為對象,類也不例外是java.lang.Class的實例。 > java.lang.Class即為類這個對象的抽象(描述) ## 1.2 類的連接階段 ### 1. 當類被加載之后,系統為之生成對應的Class對象,接著就會進入**連接階段**。連接階段負責將類的二進制數據合并到jre當中去。 ### 2. **連接分為三個階段:** 1) 驗證階段 驗證加載的類是否有正確的內部結構,并且與其他類協調一致。 2) 準備階段 負責為類的類變量分配內存,并設置默認初始值。 3) 解析階段 將類的二進制數據中的符號引用替換成直接引用。 ## 1.3 類的初始化階段 ### 1.3.1 初始化過程 > 1、該階段有jvm負責對類進行初始化,主要是對類變量進行初始化。 > 2、java對類變量指定初始值有兩種方式: > ---- 1)**聲明類變量時指定初始值** > ---- 2)**靜態初始化塊對類變量指定初始值** > ---- 3)**如果沒有顯示的指定初始值,則初始化為默認值** > 3、**類初始化語句和靜態初始化塊安裝定義的順序執行** ``` public class Test { static { // 使用靜態初始化塊為變量b指定出初始值 b = 6; System.out.println("----------"); } // 聲明變量a時指定初始值 static int a = 5; static int b = 9; // ① static int c; public static void main(String[] args) { System.out.println(Test.b); } } ``` ### 1.3.2 類初始化時機 **以下使用類或者接口時,都會引起類的初始化:** 1、當創建類的實例時(new 或者反射) 2、調用某類的類方法(靜態方法) 3、調用某個類的或者接口的類變量,或者為類變量賦值 4、初始化某一個類的子類(初始化時,總是會先初始化父類) 5、使用java命令運行某個主類時,當運行某個主類時,程序會先初始化主類。 ### 1.3.2 final關鍵字與類初始化 > **1、對于一個final類型的類變量,如果該變量的值編譯期時可確定下來,則這個類變量相當于一個“宏變量”。** > > 2、java編譯器會在編譯時,將這個類變量出現的地方替換成它的值,**因此,程序使用改類變量也不會引起類的初始化。** ``` class MyTest { static { System.out.println("靜態初始化塊..."); } // 使用一個字符串直接量為static final的類變量賦值 static final String compileConstant = "hello java"; } public class CompileConstantTest { public static void main(String[] args) { // 訪問、輸出MyTest中的compileConstant類變量 System.out.println(MyTest.compileConstant); // ① } } ``` 由于compileConstant這類變量有final關鍵字修飾,并且在編譯時類變量的值就可以被確定下來(一個固定的字符串),所以
                  <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>

                              哎呀哎呀视频在线观看