靜態內部類和非靜態內部類區別匯總


一、非靜態內部類:

1、變量和方法不能聲明為靜態的。(類的編譯順序:外部類--靜態方法或屬性--內部類,如果內部類聲明為靜態的,造成編譯順序沖突。個人理解)

2、實例化的時候需要依附在外部類上面。比如:B是A的非靜態內部類,實例化B,則:A.B b = new A().new B();

3、內部類可以引用外部類的靜態或者非靜態屬性或者方法。

 

二、靜態內部類:

1、屬性和方法可以聲明為靜態的或者非靜態的。

2、實例化靜態內部類:比如:B是A的靜態內部類,A.B b = new A.B();

3、內部類只能引用外部類的靜態的屬性或者方法。

4、如果屬性或者方法聲明為靜態的,那么可以直接通過類名直接使用。比如B是A的靜態內部類,b()是B中的一個靜態屬性,則可以:A.B.b();

 

三、關於java靜態方法的相關總結:

一個類的靜態方法只能訪問靜態屬性(靜態方法是屬於類的,而普通方法是屬於對象的。)

一個類的靜態方法不能夠直接調用非靜態方法;
如訪問控制權限允許,static 屬性和方法可以使用類名加“.”方式調用;當然也可以使用實例加“.”方式調用;
靜態方法中不存在當前對象,因而不能使用“this”,當然也不能使用”super”;
靜態方法不能被非靜態方法覆蓋;
構造方法不允許聲明為 static 的;
局部變量不能使用static修飾;

 

 

問題:為什么一個類的靜態方法只能訪問靜態屬性或靜態方法?

 

回答:靜態方法是屬於類的,而普通方法是屬於對象的。
屬於類的靜態方法可以在對象不存在的時候就能訪問到,而普通方法必須先new一個對象才能用這個對象訪問
。當我們訪問調用靜態方法的時候(使用類名.靜態方法名)這個時候就沒有對象創建,所以普通方法是訪問不到的。
為了避免這種錯誤,所以java就不允許在靜態方法中訪問非靜態方法。可以想一下main方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM