<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/08-Reuse?id=%e7%bb%a7%e6%89%bf%e5%92%8c%e5%88%9d%e5%a7%8b%e5%8c%96) 了解包括繼承在內的整個初始化過程是有幫助的,這樣可以對所發生的一切有全局性的把握。考慮下面的例子: ~~~ // reuse/Beetle.java // The full process of initialization class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printInit("static Insect.x1 initialized"); static int printInit(String s) { System.out.println(s); return 47; } } public class Beetle extends Insect { private int k = printInit("Beetle.k.initialized"); public Beetle() { System.out.println("k = " + k); System.out.println("j = " + j); } private static int x2 = printInit("static Beetle.x2 initialized"); public static void main(String[] args) { System.out.println("Beetle constructor"); Beetle b = new Beetle(); } } ~~~ 輸出: ~~~ static Insect.x1 initialized static Beetle.x2 initialized Beetle constructor i = 9, j = 0 Beetle.k initialized k = 47 j = 39 ~~~ 當執行**java Beetle**,首先會試圖訪問**Beetle**類的`main()`方法(一個靜態方法),加載器啟動并找出**Beetle**類的編譯代碼(在名為**Beetle.class**的文件中)。在加載過程中,編譯器注意到有一個基類,于是繼續加載基類。不論是否創建了基類的對象,基類都會被加載。(可以嘗試把創建基類對象的代碼注釋掉證明這點。) 如果基類還存在自身的基類,那么第二個基類也將被加載,以此類推。接下來,根基類(例子中根基類是**Insect**)的**static**的初始化開始執行,接著是派生類,以此類推。這點很重要,因為派生類中**static**的初始化可能依賴基類成員是否被正確地初始化。 至此,必要的類都加載完畢,可以創建對象了。首先,對象中的所有基本類型變量都被置為默認值,對象引用被設為**null**—— 這是通過將對象內存設為二進制零值一舉生成的。接著會調用基類的構造器。本例中是自動調用的,但是你也可以使用**super**調用指定的基類構造器(在**Beetle**構造器中的第一步操作)。基類構造器和派生類構造器一樣以相同的順序經歷相同的過程。當基類構造器完成后,實例變量按文本順序初始化。最終,構造器的剩余部分被執行。
                  <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>

                              哎呀哎呀视频在线观看