在團隊代碼中看到對於當前類中的方法,使用了this關鍵字。通過測試發現,在此種狀況下,this關鍵字的使用無關緊要。所以,對java中this的使用作下總結:java
package testTHIS; public class TestTHIS { int flag = 0; public static void main(String[] args) { Test test = new Test(); test.main(); TestTHIS tt = new TestTHIS(); tt.say(); // 不能使用this.say(); } public void say() { MyTest mt = new MyTest(); mt.main(); int i = this.flag; int k = flag; } } class Test { public void main() { say1(); this.say1(); say2(); this.say2(); say3(); this.say3(); say4(); this.say4(); } public void say1() { System.out.println("111111111111111"); } protected void say2() { System.out.println("222222222222222"); } void say3() { System.out.println("333333333333333"); } private void say4() { System.out.println("444444444444444"); } } class MyTest extends Test { @Override public void main() { this.say1(); } }
對於兩種狀況,必須使用關鍵字this。構造方法中和內部類調用外部類當中的方法,demo以下:ide
public class Test { private final int number; public Test(int number){ this.number = number; // 輸出5 // number = number; 輸出0 } public static void main(String[] args) { Test ts = new Test(5); System.out.println(ts.number); } }
上面的示例代碼展現了構造方法中使用this的狀況,若是不使用會出錯。此外咱們能夠查看JDK的源碼,如String類中的多種構造方法,都使用了this關鍵字。此外,我卻是以爲this
不少狀況下只是標識做用了,好比區分一下this.name
跟 super.name
一個是本身的,一個是父類的。僅僅是爲了代碼可讀。函數
public class A { int i = 1; public A(){ // thread是匿名類對象,它的run方法中用到了外部類的run方法 // 這時因爲函數同名,直接調用就不行了 // 解決辦法: 外部類的類名加上this引用來講明要調用的是外部類的方法run // 在該類的有事件監聽或者其餘方法的內部若要調用該類的引用,用this就會出錯,這時可使用類名.this,就ok了 Thread thread = new Thread() { @Override 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(); } }
上述展現了匿名內部類中使用關鍵字this的用法,當內部類中的方法和外部類中的方法同名的時候,若是想在內部類中使用外部類中的同名方法,要用外部類.this.方法類,來顯示的使用外部類中的同名方法。測試