Java語言this的用法

Java中的this的用法

用類名定義一個變量的時候,定義的應該只是一個引用,外面可以通過這個引用來訪問這個類里面的屬性和方法,那們類里面是夠也應該有一個引用來訪問自己的屬性和方法納?呵呵,JAVA提供了一個很好的東西,就是 this 對象,它可以在類里面來引用這個類的屬性和方法。

1.當全局變量跟局部變量重名時,表示使用全局變量(此時this指代本類對象)
例有一類class A{
String name;
void setName(String name){
this.name = name;
}
}
2.構造方法相互調用,此時this指代本類類名
注意this只能放在構造方法第一句
如class B{
String name;
B(){
this("name");//會自動調用帶String參數的構造方法
}
B(String name){
this.name = name;
}

}

  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!"); 
} 

}
運行結果:

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

在這個例子中,構造函數Hello中,參數s與類Hello的變量s同名,這時如果直接對s進行操作則是對參數s進行操作。若要對類Hello的成員變量s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行打印結果; 第二行是對成員變量s的打印;第三行是先對成員變量s賦傳過來的參數s值后再打印,所以結果是HelloWorld!

  1. 把this作為參數傳遞
    當你要把自己作為參數傳遞給別的對象時,也可以用this。如:

public class A {
public A() {
new B(this).print();
}

public void print() {
System.out.println("Hello from A!");
}
}

public class B {
A a;
public B(A a) {
this.a = a;
}

public void print() {
a.print();
System.out.println("Hello from B!");
}
}

運行結果:
Hello from A!
Hello from B!
在這個例子中,對象A的構造函數中,用new B(this)把對象A自己作為參數傳遞給了對象B的構造函數。

  1. 注意匿名類和內部類中的中的this。
    有時候,我們會用到一些內部類和匿名類,如事件處理。當在匿名類中用this時,這個this則指的是匿名類或內部類本身。這時如果我們要使用外部類的方法和變量的話,則應該加上外部類的類名。如下面這個例子:

public class A {
int i = 1;

public A() { 
    Thread thread = new Thread() { 
        public void run() { 
            for(;;) { 
                A.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 A(); 
}

}

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

6.在構造函數中,通過this可以調用同一class中別的構造函數,如

public class Flower{
Flower (int petals){}
Flower(String ss){}
Flower(int petals, Sting ss){
//petals++;調用另一個構造函數的語句必須在最起始的位置
this(petals);
//this(ss);會產生錯誤,因為在一個構造函數中只能調用一個構造函數
}
}

值得注意的是:
1:在構造調用另一個構造函數,調用動作必須置于最起始的位置。
2:不能在構造函數以外的任何函數內調用構造函數。
3:在一個構造函數內只能調用一個構造函數。

這里是歸納總結?。?!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,624評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 面向對象主要針對面向過程。 面向過程的基本單元是函數。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,217評論 0 4
  • 畫到第五天,依舊沒有讓自己滿意。每次有些社么想做的只要一下達不到目標就會心起波瀾,希望自己可以堅持下去,30天以后...
    三芙拉沃閱讀 162評論 0 0

友情鏈接更多精彩內容