靜態方法中不能new內部類的例項物件的總結
阿新 • • 發佈:2018-12-26
原文
class Test{ public void main(String[] args){ A testA=new A(); //這裡會出現問題 new Thread(new Runnable(){ public void run(){ testA.printout(); } }).start(); System.out.println("aaaaaa"); } class A{ public void printout(){ System.out.println("aaaaaa"); } } } /** 靜態方法中不能new內部類的例項物件。這是為什麼了? 內部類的最重要的一個特點就是它可以直接訪問它外部類的成員變數。成員變數是 物件身上的。物件建立完成了,才會為成員變數分配空間。能呼叫成員變數, 意味著一定有了例項物件. main方法是靜態的,它執行的時候可以不用建立那個物件。這就矛盾了。 main方法執行的時候沒有任何外部類的例項物件。我們的內部類的例項物件建立了 它又可以訪問外部類的成員變數,外部類的例項物件在哪兒了? 所以這個原因,我們下面的程式碼就要進行改寫? 要想建立內部類的例項物件,必須建立外部類的例項物件。 */ // 修改之後的程式碼如下: class Test{ public void main(String[] args){ new Test().init(); System.out.println("aaaaaa"); } public void init(){ A testA=new TestA(); new Thread(new Runnable(){ public void run(){ testA.printout(); } }).start(); } class A{ public void printout(){ System.out.println("aaaaaa"); } } } /** 方法的呼叫一定是要通過物件呼叫的。哪個物件呼叫了這個方法,建立內部類例項物件 的時候 所使用的外部類的例項物件就是誰*/