更新時(shí)間:2020-11-18 17:23:11 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽983次
this關(guān)鍵字是我們?cè)趯W(xué)習(xí)Java中接觸的為數(shù)不多的十分重要的關(guān)鍵字,無(wú)論是在Java面試題中還是實(shí)際的項(xiàng)目中都會(huì)經(jīng)常遇到,因此,this關(guān)鍵字是我們學(xué)習(xí)Java的必修課。
this關(guān)鍵字表示當(dāng)前這個(gè)對(duì)象,也就是說(shuō)當(dāng)前誰(shuí)調(diào)用該方法則這個(gè)對(duì)象就是誰(shuí)。每個(gè)對(duì)象都可以使用this關(guān)鍵字訪問(wèn)其自身的引用,this引用可以隱式的或顯示的調(diào)用該方法的對(duì)象的實(shí)例變量和其他方法,this的參考名稱(chēng)并不屬于實(shí)體變量,事實(shí)上在調(diào)用本對(duì)象方法時(shí),this當(dāng)成一個(gè)隱形的參數(shù)傳給這個(gè)方法。
下面我們就來(lái)一一介紹this關(guān)鍵字的用法:
一、當(dāng)成員變量和局部變量重名時(shí),在方法中使用this時(shí),表示的是該方法所在類(lèi)中的成員變量。(this是當(dāng)前對(duì)象自己)
public class Hello {
String s = "Hello";//這里的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);//驗(yàn)證成員變量值的改變
}
}
結(jié)果為:s = HelloWorld!
1 -> this.s = Hello
2 ->this.s = HelloWorld!s=HelloWorld!
二、把自己當(dāng)作參數(shù)傳遞時(shí),也可以用this.(this作當(dāng)前參數(shù)進(jìn)行傳遞)
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!
在這個(gè)例子中,對(duì)象A的構(gòu)造函數(shù)中,用new B(this)把對(duì)象A自己作為參數(shù)傳遞給了對(duì)象B的構(gòu)造函數(shù)。
三、當(dāng)在匿名類(lèi)中用this時(shí),這個(gè)this則指的是匿名類(lèi)或內(nèi)部類(lèi)本身。
這時(shí)如果我們要使用外部類(lèi)的方法和變量的話,則應(yīng)該加上外部類(lèi)的類(lè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)用外部類(lèi)的方法
try {
sleep(1000);
} catch (InterruptedException ie) {
}
}
}
}; // 注意這里有分號(hào)
thread.start();
}
public void run() {
System.out.println("i = " + i);
i++;
}
public static void main(String[] args) throws Exception {
new HelloB();
}
}
在上面這個(gè)例子中, thread 是一個(gè)匿名類(lèi)對(duì)象,在它的定義中,它的 run 函數(shù)里用到了外部類(lèi)的 run 函數(shù)。這時(shí)由于函數(shù)同名,直接調(diào)用就不行了。這時(shí)有兩種辦法,一種就是把外部的 run 函數(shù)換一個(gè)名字,但這種辦法對(duì)于一個(gè)開(kāi)發(fā)到中途的應(yīng)用來(lái)說(shuō)是不可取的。那么就可以用這個(gè)例子中的辦法用外部類(lèi)的類(lèi)名加上 this 引用來(lái)說(shuō)明要調(diào)用的是外部類(lèi)的方法 run。
四、在構(gòu)造函數(shù)中,通過(guò)this可以調(diào)用同一類(lèi)中別的構(gòu)造函數(shù)。如:
public class ThisTest {
ThisTest(String str) {
System.out.println(str);
}
ThisTest() {
this("this測(cè)試成功!");
}
public static void main(String[] args) {
ThisTest thistest = new ThisTest();
}
}
為了更確切的說(shuō)明this用法,另外一個(gè)例子為:
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測(cè)試成功",25);
}
}
結(jié)果為:this測(cè)試成功25
值得注意的是:
1:在構(gòu)造調(diào)用另一個(gè)構(gòu)造函數(shù),調(diào)用動(dòng)作必須置于最起始的位置。
2:不能在構(gòu)造函數(shù)以外的任何函數(shù)內(nèi)調(diào)用構(gòu)造函數(shù)。
3:在一個(gè)構(gòu)造函數(shù)內(nèi)只能調(diào)用一個(gè)構(gòu)造函數(shù)。這一點(diǎn)在第二個(gè)構(gòu)造方法內(nèi)可以看到,第一個(gè)this(str),第二個(gè)為this.age=age;
五、this同時(shí)傳遞多個(gè)參數(shù)
public class TestClass {
int x;
int y;
static void showtest(TestClass tc) {//實(shí)例化對(duì)象
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
希望大家可以通過(guò)上面對(duì)this關(guān)鍵字的介紹和用法實(shí)例的學(xué)習(xí),可以在今后的Java學(xué)習(xí)和編程中熟練使用this關(guān)鍵字。在本站的Java SE教程中有著對(duì)眾多Java關(guān)鍵字的全方位解讀,感興趣的小伙伴不容錯(cuò)過(guò)哦。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743