首頁 > Java > Java入門 > 主體

java中this關鍵字怎麼使用?

青灯夜游
發布: 2020-11-02 16:30:42
原創
20061 人瀏覽過

java中this關鍵字的用法:1、當成員變數和局部變數重名時,在方法中使用this時,表示的是該方法所在類別中的成員變數;2、在建構函數中,透過this可以呼叫同一類別中別的建構函數;3、使用this同時傳遞多個參數。

java中this關鍵字怎麼使用?

相關推薦:《Java影片教學

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;//把参数值赋给成员变量,成员变量的值改变
       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);//验证成员变量值的改变    }
}
登入後複製

結果為:

s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
s=HelloWorld!
登入後複製

在這個例子中,建構子Hello中,參數s與類Hello的成員變數s同名,這時如果直接對s進行操作則是對參數s進行操作。若要對類Hello的成員變數s進行操作就應該用this進行引用。運行結果的第一行就是直接將建構函式中傳遞過來的參數s進行列印結果; 第二行是對成員變數s的列印;第三行是先將成員變數s賦傳過來的參數s值後再列印,所以結果是HelloWorld!而第四行是主函數中直接列印類別中的成員變數的值,也可以驗證成員變數值的改變。

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

class A {
    public A() {
       new B(this).print();// 调用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();//调用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();
    }
}
登入後複製

結果為:

HelloAA from A!
HelloAB from B!
HelloAA from A!
HelloAA from A!
HelloAB from B!
登入後複製

在這個例子中,物件A的建構子中,用new B(this)把物件A自己當作參數傳遞給了物件B的建構子。

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

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();//调用外部类的方法
                  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 函數裡用到了外部類別的 run 函數。這時由於函數同名,直接呼叫就不行了。這時有兩種辦法,一種就是把外在的 run 函數換一個名字,但這種辦法對於一個發展到中途的應用來說是不可取的。那就可以用這個範例中的方法用外在類別的類別名稱加上 this 引用來說明要呼叫的是外部類別的方法 run。

4、在建構子中,透過this可以呼叫同一類別中別的建構子。如:

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);
      
    }
}
登入後複製

結果為:

this测试成功
25
登入後複製

值得注意的是: 
# 1:在構造呼叫另一個建構函數,呼叫動作必須置於最起始的位置。 
  2:不能在建構子以外的任何函數內呼叫建構子。 
  3:在一個建構函式內只能呼叫一個建構函數。

5、this同時傳遞多個參數。

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();
    }
}
登入後複製

結果為:

9 10
登入後複製

程式碼中的showtest(this),這裡的this就是把目前實例化的p傳給了showtest()方法,從而就運行了。

更多程式相關知識,請造訪:程式設計入門! !

以上是java中this關鍵字怎麼使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板