溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java中如何使用this關(guān)鍵字

發(fā)布時間:2020-11-03 10:04:40 來源:億速云 閱讀:146 作者:小新 欄目:編程語言

這篇文章主要介紹java中如何使用this關(guān)鍵字,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

java中this關(guān)鍵字的用法:1、當成員變量和局部變量重名時,在方法中使用this時,表示的是該方法所在類中的成員變量;2、在構(gòu)造函數(shù)中,通過this可以調(diào)用同一類中別的構(gòu)造函數(shù);3、使用this同時傳遞多個參數(shù)。

1、當成員變量和局部變量重名時,在方法中使用this時,表示的是該方法所在類中的成員變量。(this是當前對象自己)

public class Hello {
    String s = "Hello"; 
    public Hello(String s) {
       System.out.println("s = " + s);
       System.out.println("1 -> this.s = " + this.s);       
       this.s = s;//把參數(shù)值賦給成員變量,成員變量的值改變
       System.out.println("2 -> this.s = " + this.s);
    } 
    public static void main(String[] args) {
       Hello x = new Hello("HelloWorld!");
       System.out.println("s=" + x.s);//驗證成員變量值的改變    }
}

結(jié)果為:

s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
s=HelloWorld!

在這個例子中,構(gòu)造函數(shù)Hello中,參數(shù)s與類Hello的成員變量s同名,這時如果直接對s進行操作則是對參數(shù)s進行操作。若要對類Hello的成員變量s進行操作就應該用this進行引用。運行結(jié)果的第一行就是直接對構(gòu)造函數(shù)中傳遞過來的參數(shù)s進行打印結(jié)果; 第二行是對成員變量s的打??;第三行是先對成員變量s賦傳過來的參數(shù)s值后再打印,所以結(jié)果是HelloWorld!而第四行是主函數(shù)中直接打印類中的成員變量的值,也可以驗證成員變量值的改變。

2、把自己當作參數(shù)傳遞時,也可以用this.(this作當前參數(shù)進行傳遞)

class A {
    public A() {
       new B(this).print();// 調(diào)用B的方法
    }
    public void print() {
       System.out.println("HelloAA from A!");
    }
}
class B {
    A a;
    public B(A a) {
       this.a = a;
    }
    public void print() {
       a.print();//調(diào)用A的方法
       System.out.println("HelloAB from B!");
    }
}
public class HelloA {
    public static void main(String[] args) {
       A aaa = new A();
       aaa.print();
       B bbb = new B(aaa);
       bbb.print();
    }
}

結(jié)果為:

HelloAA from A!
HelloAB from B!
HelloAA from A!
HelloAA from A!
HelloAB from B!

在這個例子中,對象A的構(gòu)造函數(shù)中,用new B(this)把對象A自己作為參數(shù)傳遞給了對象B的構(gòu)造函數(shù)。

3、有時候,我們會用到一些內(nèi)部類和匿名類,如事件處理。當在匿名類中用this時,這個this則指的是匿名類或內(nèi)部類本身。這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名。如:

public class HelloB {
    int i = 1;
 
    public HelloB() {
       Thread thread = new Thread() {
           public void run() {
              for (int j=0;j<20;j++) {
                  HelloB.this.run();//調(diào)用外部類的方法
                  try {
                     sleep(1000);
                  } catch (InterruptedException ie) {
                  }
              }
           }
       }; // 注意這里有分號
       thread.start();
    }
 
    public void run() {
       System.out.println("i = " + i);
       i++;
    }
   
    public static void main(String[] args) throws Exception {
       new HelloB();
    }
}

在上面這個例子中, thread 是一個匿名類對象,在它的定義中,它的 run 函數(shù)里用到了外部類的 run 函數(shù)。這時由于函數(shù)同名,直接調(diào)用就不行了。這時有兩種辦法,一種就是把外部的 run 函數(shù)換一個名字,但這種辦法對于一個開發(fā)到中途的應用來說是不可取的。那么就可以用這個例子中的辦法用外部類的類名加上 this 引用來說明要調(diào)用的是外部類的方法 run。

4、在構(gòu)造函數(shù)中,通過this可以調(diào)用同一類中別的構(gòu)造函數(shù)。如:

public class ThisTest {
    ThisTest(String str) {
       System.out.println(str);
    }
    ThisTest() {
       this("this測試成功!");
    }
 
    public static void main(String[] args) {
       ThisTest thistest = new ThisTest();
    }
}

為了更確切的說明this用法,另外一個例子為:

public class ThisTest {
    private int age;
    private String str;
 
    ThisTest(String str) {
       this.str=str;
       System.out.println(str);
    }
    ThisTest(String str,int age) {
       this(str);
       this.age=age;
       System.out.println(age);
    }
 
    public static void main(String[] args) {
       ThisTest thistest = new ThisTest("this測試成功",25);
      
    }
}

結(jié)果為:

this測試成功
25

值得注意的是:
  1:在構(gòu)造調(diào)用另一個構(gòu)造函數(shù),調(diào)用動作必須置于最起始的位置。
  2:不能在構(gòu)造函數(shù)以外的任何函數(shù)內(nèi)調(diào)用構(gòu)造函數(shù)。
  3:在一個構(gòu)造函數(shù)內(nèi)只能調(diào)用一個構(gòu)造函數(shù)。

5、this同時傳遞多個參數(shù)。

public class TestClass {
    int x;
    int y;
 
    static void showtest(TestClass tc) {//實例化對象
       System.out.println(tc.x + " " + tc.y);
    }
    void seeit() {
       showtest(this);
    }
 
    public static void main(String[] args) {
       TestClass p = new TestClass();
       p.x = 9;
       p.y = 10;
       p.seeit();
    }
}

結(jié)果為:

9 10

代碼中的showtest(this),這里的this就是把當前實例化的p傳給了showtest()方法,從而就運行了。

以上是java中如何使用this關(guān)鍵字的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI