8.Java this關鍵字詳解

來源:互聯網
上載者:User

標籤:

this 關鍵字用來表示當前對象本身,或當前類的一個執行個體,通過 this 可以調用本對象的所有方法和屬性。例如:

  1. public class Demo{
  2. public int x = 10;
  3. public int y = 15;
  4. public void sum(){
  5. // 通過 this 點取成員變數
  6. int z = this.x + this.y;
  7. System.out.println("x + y = " + z);
  8. }
  9. public static void main(String[] args) {
  10. Demo obj = new Demo();
  11. obj.sum();
  12. }
  13. }

運行結果:
x + y = 25

上面的程式中,obj 是 Demo 類的一個執行個體,this 與 obj 等價,執行 int z = this.x + this.y;,就相當於執行 int z = obj.x + obj.y;。

注意:this 只有在類執行個體化後才有意義。

使用this區分同名變數

成員變數與方法內部的變數重名時,希望在方法內部調用成員變數,怎麼辦呢?這時候只能使用this,例如:

  1. public class Demo{
  2.     public String name;
  3.     public int age;
  4.   
  5.     public Demo(String name, int age){
  6.         this.name = name;
  7.         this.age = age;
  8.     }
  9.   
  10.     public void say(){
  11.         System.out.println("網站的名字是" + name + ",已經成立了" + age + "年");
  12.     }
  13.   
  14.     public static void main(String[] args) {
  15.         Demo obj = new Demo("微學苑", 3);
  16.         obj.say();
  17.     }
  18. }

運行結果:
網站的名字是微學苑,已經成立了3年

形參的範圍是整個方法體,是局部變數。在Demo()中,形參和成員變數重名,如果不使用this,訪問到的就是局部變數name和age,而不是成員變數。在 say() 中,我們沒有使用 this,因為成員變數的範圍是整個執行個體,當然也可以加上 this:

  1. public void say(){
  2. System.out.println("網站的名字是" + this.name + ",已經成立了" + this.age + "年");
  3. }

Java 預設將所有成員變數和成員方法與 this 關聯在一起,因此使用 this 在某些情況下是多餘的。

作為方法名來初始化對象

也就是相當於調用本類的其它構造方法,它必須作為構造方法的第一句。樣本如下:

  1. public class Demo{
  2. public String name;
  3. public int age;
  4. public Demo(){
  5. this("微學苑", 3);
  6. }
  7. public Demo(String name, int age){
  8. this.name = name;
  9. this.age = age;
  10. }
  11. public void say(){
  12. System.out.println("網站的名字是" + name + ",已經成立了" + age + "年");
  13. }
  14. public static void main(String[] args) {
  15. Demo obj = new Demo();
  16. obj.say();
  17. }
  18. }

運行結果:
網站的名字是微學苑,已經成立了3年

值得注意的是:

  • 在構造方法中調用另一個構造方法,調用動作必須置於最起始的位置。
  • 不能在構造方法以外的任何方法內調用構造方法。
  • 在一個構造方法內只能調用一個構造方法。


上述代碼涉及到方法重載,即Java允許出現多個同名方法,只要參數不同就可以。後續章節會講解。

作為參數傳遞

需要在某些完全分離的類中調用一個方法,並將當前對象的一個引用作為參數傳遞時。例如:

  1. public class Demo{
  2. public static void main(String[] args){
  3. B b = new B(new A());
  4. }
  5. }
  6. class A{
  7. public A(){
  8. new B(this).print(); // 匿名對象
  9. }
  10. public void print(){
  11. System.out.println("Hello from A!");
  12. }
  13. }
  14. class B{
  15. A a;
  16. public B(A a){
  17. this.a = a;
  18. }
  19. public void print() {
  20. a.print();
  21. System.out.println("Hello from B!");
  22. }
  23. }

運行結果:
Hello from A!
Hello from B!

匿名對象就是沒有名字的對象。如果對象只使用一次,就可以作為匿名對象,代碼中 new B(this).print(); 等價於 ( new B(this) ).print();,先通過 new B(this) 建立一個沒有名字的對象,再調用它的方法。

8.Java this關鍵字詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.