今天研究下JDK源代碼,發現tools.jar中javac包下的Mian方法居然有 Main.this..用法,百思不得其解,因而網上查找了資料,編輯了下發下。。。。 java
有時候,咱們會用到一些內部類和匿名類。當在匿名類中用this時(this.方法名),這個this則指的是匿名類或內部類自己。這時若是咱們要使用外部類的方法和變量的話,則應該加上外部類的類名(外部類名.this.方法名)。以下面這個例子(一些代碼省略了,如異常處理):
public class Demo{
public Demo() {
Thread thread = new Thread() {
public void run() {
Demo.this.run();//調用外部類的run方法,輸出 "外部類" 函數
System.out.println("內部類");
};
this.run();//調用內部類的run方法,輸出 "外部類 內部類" this
thread.start();
}
public void run() {
System.out.println("外部類");
}
}
在上面這個例子中, thread是一個匿名類對象,在它的定義中,它的run函數裏用到了外部類的run函數。這時因爲函數同名,直接調用就不行了。這時有兩種辦法,一種就是把外部的 run 函數換一個名字,但這種辦法對於一個開發到中途的應用來講是不可取的。那麼就能夠用這個例子中的辦法用 外部類的類名加上this引用來講明要調用的是外部類的方法run。 spa