<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國際加速解決方案。 廣告
                這一節我們接著上一節來繼續學習this關鍵字. 我們之前在7.5節中的構造函數應注意的細節中提到過一個細節就是構造函數可以調用一般函數,但一般函數不能直接調用構造函數.但是我們沒有深究構造函數能不能調用構造函數,那么現在我們就來看一看這個問題. 那么構造函數與構造函數之間是怎么訪問呢? 為了掌握這個問題,我們必須要明確一個概念,那就是在一個類中的成員如果要被執行,就必須由對象調用.而每個對象都有一個所屬的this. java語言給了關鍵字this這個功能,那就是用this調用構造函數,而且也是通過參數不同選擇調用不同的構造函數. 我們來看一個例子: ~~~ class Person { private String name; private int age; Person()//構造方法1 { System.out.println("person run"); } Person(String name)//構造方法2 { this.name = name; } Person(String name,int age)//構造方法3 { this.name = name; this.age = age; } public void speak() { System.out.println(this.name+":"+this.age); } } ~~~ ~~~ class ThisTest { public static void main(String[] args) { Person kobe = new Person("科比",37); kobe.speak(); } } ~~~ 對于上面的例子我們可以看到,構造函數3中的第一句語句其實我們已經通過構造函數2實現了,那么為了提高代碼的復用性,我們為什么不調用構造函數2呢,java語言中用下面的語句來調用構造函數: ~~~ Person(String name,int age)//構造方法3 { this(name);//用this關鍵字調用了構造函數Person(String name) this.age = age; } ~~~ 我們看到了this關鍵字可以用于在構造函數中調用其他構造函數,當然對于調用那個構造函數,還是通過參數來確定. 那么我們就明確了構造函數與構造函數之間的調用形式. 下面我們來看兩個this關鍵字用法中需要注意的兩個細節: **第一個細節:構造函數中調用構造函數只能定義在構造函數的第一行.** 這是為什么呢,因為初始化動作一定要先執行.這就是java語言定義的一個規則,如果不是定義在第一行,編譯直接通不過. 我們看例子,把上面的構造函數3的語句交換位置: ~~~ Person(String name,int age)//構造方法3 { this.age = age; this(name);//用this關鍵字調用了構造函數Person(String name) } ~~~ 我們看編譯情況: ![](https://box.kancloud.cn/2016-05-18_573c41ec9f032.jpg) 我們看到編譯錯誤:對this的調用必須是構造器中的第一個語句,這就是我們在使用this關鍵字時的第一個細節. **第二個細節:注意構造函數的調用出現遞歸循環而導致棧內在溢出.** 我們看個例子: ~~~ Person()//構造方法1 { this("KOBE"); System.out.println("person run"); } Person(String name)//構造方法2 { this(); this.name = name; } ~~~ 結果: ![](https://box.kancloud.cn/2016-05-18_573c41ecb1da1.jpg) 我們很容易發現兩個構造函數相互調用,形成了遞歸,使得兩個構造函數不斷進棧,最后棧內存溢出,程序終止. 上面我們看了兩個在使用this關鍵字時需要注意的細節,下面我們再簡單的看看this關鍵的應用情況. 我們一般什么時候使用this呢,我們上一節中說過this的概念:this就代表對象,就是所在函數所在對象的引用.那么我們不難理解,當我們在一個類中用到了本類的對象,我們就通常會用this來引用. 那么我們來實現一個功能:判斷兩個人是否是同齡人. 分析一下:要判斷兩個人是否同齡,我們只需要比較這兩個人(也就是兩個Person對象)的年齡是否相等即可,那么也就是說一個對象可以直接調用Person類中的方法來與另一個對象做比較就可以了. 我們可以這樣實現: ~~~ //判斷兩個人是否同齡 public boolean compare(Person p) { return this.age == p.age; } ~~~ 我們來測試一下: ~~~ class ThisTest { public static void main(String[] args) { Person kobe = new Person("科比",37); Person james = new Person("詹姆斯",31); kobe.speak(); james.speak(); System.out.println("這兩個人相等嗎:"+kobe.compare(james)); } } ~~~ 結果: ![](https://box.kancloud.cn/2016-05-18_573c41ecc70ad.jpg) 我們看到this的主要應用就是代表對象,那個對象調用了this所有的函數,我們就通俗的認為this就代表那個對象.
                  <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>

                              哎呀哎呀视频在线观看