java that关键字_Java中this关键字的几种用法
1 . 當(dāng)成員變量和局部變量重名時(shí),在方法中使用this時(shí),表示的是該方法所在類中的成員變量。(this是當(dāng)前對(duì)象自己)
如: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);//驗(yàn)證成員變量值的改變
}
}
結(jié)果為:s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
s=HelloWorld!
在這個(gè)例子中,構(gòu)造函數(shù)Hello中,參數(shù)s與類Hello的成員變量s同名,這時(shí)如果直接對(duì)s進(jìn)行操作則是對(duì)參數(shù)s進(jìn)行操作。若要對(duì)類Hello的成員變量s進(jìn)行操作就應(yīng)該用this進(jìn)行引用。運(yùn)行結(jié)果的第一行就是直接對(duì)構(gòu)造函數(shù)中傳遞過(guò)來(lái)的參數(shù)s進(jìn)行打印結(jié)果; 第二行是對(duì)成員變量s的打印;第三行是先對(duì)成員變量s賦傳過(guò)來(lái)的參數(shù)s值后再打印,所以結(jié)果是HelloWorld!而第四行是主函數(shù)中直接打印類中的成員變量的值,也可以驗(yàn)證成員變量值的改變。
2.把自己當(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ù)。
3.有時(shí)候,我們會(huì)用到一些內(nèi)部類和匿名類,如事件處理。當(dāng)在匿名類中用this時(shí),這個(gè)this則指的是匿名類或內(nèi)部類本身。這時(shí)如果我們要使用外部類的方法和變量的話,則應(yīng)該加上外部類的類名。如:
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) {
}
}
}
}; // 注意這里有分號(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è)匿名類對(duì)象,在它的定義中,它的 run 函數(shù)里用到了外部類的 run 函數(shù)。這時(shí)由于函數(shù)同名,直接調(diào)用就不行了。這時(shí)有兩種辦法,一種就是把外部的 run 函數(shù)換一個(gè)名字,但這種辦法對(duì)于一個(gè)開(kāi)發(fā)到中途的應(yīng)用來(lái)說(shuō)是不可取的。那么就可以用這個(gè)例子中的辦法用外部類的類名加上 this 引用來(lái)說(shuō)明要調(diào)用的是外部類的方法 run。
4. 在構(gòu)造函數(shù)中,通過(guò)this可以調(diào)用同一類中別的構(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ù)。
5.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
代碼中的showtest(this),這里的this就是把當(dāng)前實(shí)例化的p傳給了showtest()方法,從而就運(yùn)行了。
總結(jié)
以上是生活随笔為你收集整理的java that关键字_Java中this关键字的几种用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 虎贲计算机二级视频解析百度云,详解虎贲T
- 下一篇: php读取某类型文件代码,php代码实现