java之靜態內部類 非靜態類內部類的建立

2021-08-29 02:55:37 字數 2235 閱讀 1607

package test;

public class testclass

}}package test;

import test.testclass.inner; // 請注意這裡,一定一定要匯入內部類檔案,不然(1)會報錯

public class implements

}//結果

1

package test;

public class implements

}//結果

1

package test;

public class testclass

}}public class implements

}//結果

1

乙個類檔案中,只能有乙個公共的(public)外部類,但可以有多個(public、default、private)內部類,多個(default)外部類,private不能用來修飾外部類!如圖·:當試圖申明多個public外部類時保錯,外部類也不能用private來修飾

(1)靜態內部類只能訪問外部類的靜態方法,靜態屬性,靜態方法,如圖,當靜態內部類試圖訪問非靜態變數和非靜態方法時編譯器報錯了:

(2)而普通的內部類可以訪問外部類的任何屬性和方法(靜態、非靜態、私有、公共、預設)

(3)只有靜態內部類,才能在類中申明靜態方法,普通內部類申明靜態方法會報錯。

(4)外部類不能直接訪問所有內部類的成員和方法,但可以通過建立內部類物件的方式進行訪問。

(5)外部類和內部類擁有同名的變數和方法時,內部類有需要進行訪問外部的同名變數或方法,可以通過外部類.this.方法名/變數名進行訪問。

除了靜態內部了、普通內部類外,還有乙個區域性內部類,匿名內部類其實相當於它兒子,只是把類名這些都省略了。它在實際開發中用的很少,它是在方法中定義的類,既然是方法裡頭的東西,那麼它就不能定義靜態類,靜態變數或靜態方法了,如圖,編譯器直接報錯

它的申明不能用public和private、procted修飾,可以用final和abstract修飾,另外,它也能正常訪問外部類的變數,但在訪問區域性變數時網上有很多人說它只能訪問final型別的區域性變數,於是我做了如下實驗:

結果

執行後,發現還是可以正常訪問,而且我還用了jdk1.7和1.8做了測試,發現都可以,jdk1.7之前的因為沒有就沒測試了。

但是若果是訪問方法的引數的話,jdk1.8不會報錯,但1.7報錯了,如圖是jdk1.8的。

猜測是jvm問題,於是反編譯了class檔案:

從圖中,可以看到,jvm為k加了final型別進行修飾但 j變數沒有。所以,,,我也很方。。。。不知哪位道友可解?

Java 的匿名內部類 非靜態內部類 靜態內部類

首先先說一下非靜態內部類與靜態內部類 這兩者斗是依附於乙個外部類的,然後在該外部類裡面實現自身的定義,在實現上的區別就是static修飾與否的區別 public class innerclasstest public void somemethod 非靜態內部類 class nonstaticcla...

Java內部類之靜態內部類

靜態內部類 巢狀內部類 內部類定義時加上static關鍵字。可以使用public protected default private修飾符。只可以訪問外部類的靜態成員和靜態方法,包括了私有的靜態成員和方法。生成靜態內部類物件的方式為 outerclass.innerclass innerobj ne...

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

靜態內部類可以建立靜態的成員,而非靜態的內部類不可以,原因 內部類相當於外部類的乙個屬性,非靜態內部類中如果可以使用靜態成員,但是非靜態內部類是相當於非靜態成員,是在類例項化的時候才可以使用的,所以在非靜態類中定義靜態變數有一點多餘,所以不可以這樣使用。但是在非靜態內部類中可以定義static fi...