<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### [靜態數據的初始化](https://lingcoder.gitee.io/onjava8/#/book/06-Housekeeping?id=%e9%9d%99%e6%80%81%e6%95%b0%e6%8d%ae%e7%9a%84%e5%88%9d%e5%a7%8b%e5%8c%96) 無論創建多少個對象,靜態數據都只占用一份存儲區域。**static**關鍵字不能應用于局部變量,所以只能作用于屬性(字段、域)。如果一個字段是靜態的基本類型,你沒有初始化它,那么它就會獲得基本類型的標準初值。如果它是對象引用,那么它的默認初值就是**null**。 如果在定義時進行初始化,那么靜態變量看起來就跟非靜態變量一樣。 下面例子顯示了靜態存儲區是何時初始化的: ~~~ // housekeeping/StaticInitialization.java // Specifying initial values in a class definition class Bowl { Bowl(int marker) { System.out.println("Bowl(" + marker + ")"); } void f1(int marker) { System.out.println("f1(" + marker + ")"); } } class Table { static Bowl bowl1 = new Bowl(1); Table() { System.out.println("Table()"); bowl2.f1(1); } void f2(int marker) { System.out.println("f2(" + marker + ")"); } static Bowl bowl2 = new Bowl(2); } class Cupboard { Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); Cupboard() { System.out.println("Cupboard()"); bowl4.f1(2); } void f3(int marker) { System.out.println("f3(" + marker + ")"); } static Bowl bowl5 = new Bowl(5); } public class StaticInitialization { public static void main(String[] args) { System.out.println("main creating new Cupboard()"); new Cupboard(); System.out.println("main creating new Cupboard()"); new Cupboard(); table.f2(1); cupboard.f3(1); } static Table table = new Table(); static Cupboard cupboard = new Cupboard(); } ~~~ 輸出: ~~~ Bowl(1) Bowl(2) Table() f1(1) Bowl(4) Bowl(5) Bowl(3) Cupboard() f1(2) main creating new Cupboard() Bowl(3) Cupboard() f1(2) main creating new Cupboard() Bowl(3) Cupboard() f1(2) f2(1) f3(1) ~~~ **Bowl**類展示類的創建,而**Table**和**Cupboard**在它們的類定義中包含**Bowl**類型的靜態數據成員。注意,在靜態數據成員定義之前,**Cupboard**類中先定義了一個**Bowl**類型的非靜態成員**b3**。 由輸出可見,靜態初始化只有在必要時刻才會進行。如果不創建**Table**對象,也不引用**Table.bowl1**或**Table.bowl2**,那么靜態的**Bowl**類對象**bowl1**和**bowl2**永遠不會被創建。只有在第一個 Table 對象被創建(或被訪問)時,它們才會被初始化。此后,靜態對象不會再次被初始化。 初始化的順序先是靜態對象(如果它們之前沒有被初始化的話),然后是非靜態對象,從輸出中可以看出。要執行`main()`方法,必須加載**StaticInitialization**類,它的靜態屬性**table**和**cupboard**隨后被初始化,這會導致它們對應的類也被加載,而由于它們都包含靜態的**Bowl**對象,所以**Bowl**類也會被加載。因此,在這個特殊的程序中,所有的類都會在`main()`方法之前被加載。實際情況通常并非如此,因為在典型的程序中,不會像本例中所示的那樣,將所有事物通過**static**聯系起來。 概括一下創建對象的過程,假設有個名為**Dog**的類: 1. 即使沒有顯式地使用**static**關鍵字,構造器實際上也是靜態方法。所以,當首次創建**Dog**類型的對象或是首次訪問**Dog**類的靜態方法或屬性時,Java 解釋器必須在類路徑中查找,以定位**Dog.class**。 2. 當加載完**Dog.class**后(后面會學到,這將創建一個**Class**對象),有關靜態初始化的所有動作都會執行。因此,靜態初始化只會在首次加載**Class**對象時初始化一次。 3. 當用`new Dog()`創建對象時,首先會在堆上為**Dog**對象分配足夠的存儲空間。 4. 分配的存儲空間首先會被清零,即會將**Dog**對象中的所有基本類型數據設置為默認值(數字會被置為 0,布爾型和字符型也相同),引用被置為**null**。 5. 執行所有出現在字段定義處的初始化動作。 6. 執行構造器。你將會在"復用"這一章看到,這可能會牽涉到很多動作,尤其當涉及繼承的時候。
                  <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>

                              哎呀哎呀视频在线观看