<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/06-Housekeeping?id=%e5%88%a9%e7%94%a8%e6%9e%84%e9%80%a0%e5%99%a8%e4%bf%9d%e8%af%81%e5%88%9d%e5%a7%8b%e5%8c%96) 你可能想為每個類創建一個`initialize()`方法,該方法名暗示著在使用類之前需要先調用它。不幸的是,用戶必須得記得去調用它。在 Java 中,類的設計者通過構造器保證每個對象的初始化。如果一個類有構造器,那么 Java 會在用戶使用對象之前(即對象剛創建完成)自動調用對象的構造器方法,從而保證初始化。下個挑戰是如何命名構造器方法。存在兩個問題:第一個是任何命名都可能與類中其他已有元素的命名沖突;第二個是編譯器必須始終知道構造器方法名稱,從而調用它。C++ 的解決方法看起來是最簡單且最符合邏輯的,所以 Java 中使用了同樣的方式:構造器名稱與類名相同。在初始化過程中自動調用構造器方法是有意義的。 以下示例是包含了一個構造器的類: ~~~ // housekeeping/SimpleConstructor.java // Demonstration of a simple constructor class Rock { Rock() { // 這是一個構造器 System.out.print("Rock "); } } public class SimpleConstructor { public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Rock(); } } } ~~~ 輸出: ~~~ Rock Rock Rock Rock Rock Rock Rock Rock Rock Rock ~~~ 現在,當創建一個對象時:`new Rock()`,內存被分配,構造器被調用。構造器保證了對象在你使用它之前進行了正確的初始化。 有一點需要注意,構造器方法名與類名相同,不需要符合首字母小寫的編程風格。在 C++ 中,無參構造器被稱為默認構造器,這個術語在 Java 出現之前使用了很多年。但是,出于一些原因,Java 設計者們決定使用無參構造器這個名稱,我(作者)認為這種叫法笨拙而且沒有必要,所以我打算繼續使用默認構造器。Java 8 引入了**default**關鍵字修飾方法,所以算了,我還是用無參構造器的叫法吧。 跟其他方法一樣,構造器方法也可以傳入參數來定義如何創建一個對象。之前的例子稍作修改,使得構造器接收一個參數: ~~~ // housekeeping/SimpleConstructor2.java // Constructors can have arguments class Rock2 { Rock2(int i) { System.out.print("Rock " + i + " "); } } public class SimpleConstructor2 { public static void main(String[] args) { for (int i = 0; i < 8; i++) { new Rock2(i); } } } ~~~ 輸出: ~~~ Rock 0 Rock 1 Rock 2 Rock 3 Rock 4 Rock 5 Rock 6 Rock 7 ~~~ 如果類**Tree**有一個構造方法,只接收一個參數用來表示樹的高度,那么你可以像下面這樣創建一棵樹: ~~~ Tree t = new Tree(12); // 12-foot 樹 ~~~ 如果**Tree(int)**是唯一的構造器,那么編譯器就不允許你以其他任何方式創建**Tree**類型的對象。 構造器消除了一類重要的問題,使得代碼更易讀。例如,在上面的代碼塊中,你看不到對`initialize()`方法的顯式調用,而從概念上來看,`initialize()`方法應該與對象的創建分離。在 Java 中,對象的創建與初始化是統一的概念,二者不可分割。 構造器沒有返回值,它是一種特殊的方法。但它和返回類型為`void`的普通方法不同,普通方法可以返回空值,你還能選擇讓它返回別的類型;而構造器沒有返回值,卻同時也沒有給你選擇的余地(`new`表達式雖然返回了剛創建的對象的引用,但構造器本身卻沒有返回任何值)。如果它有返回值,并且你也可以自己選擇讓它返回什么,那么編譯器就還得知道接下來該怎么處理那個返回值(這個返回值沒有接收者)。
                  <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>

                              哎呀哎呀视频在线观看