Java之靜態方法中的內部類
靜態方法中不能直接建立內部類,為什麼呢?在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。
靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法),而不允許訪問例項成員變數和例項方法。
在靜態方法中,當嘗試直接去 new一個內部類(沒有先 new 該內部類的外部類)的時候,由於靜態方法無需建立物件,靜態方法會嘗試直接建立一個內部類(不會去建立該內部類的外部類),但矛盾的是內部類能訪問各成員變數意味著一定存在外部類實體物件(內部類存在的本身的前提是有該內部類的外部類)。
所以在這個地方出現了矛盾,即靜態方法中不能直接建立內部類。
有以下幾種解決辦法:
1. new內部類時需要加final修飾(必須final!);
2. 寫一個非靜態方法!3. new 外部類().非靜態方法。
相關推薦
Java之靜態方法中的內部類
靜態方法中不能直接建立內部類,為什麼呢?在外部呼叫靜態方法時,可以使用"類名.方法名"的方式,也可以使用"物件名.方法名"的方式。而例項方法只有後面這種方式。也就是說,呼叫靜態方法可以無需建立物件。 靜態方法在訪問本類的成員時,只允許訪問靜態成員(即靜態成員變數和靜態方法
Java 中內部類特性總結(吐血之作)
內部 不能 今天 了解 基本 靜態 外部類 pro this PS:今天花了整個下午時間看內部類相關的內容,因知識點多而雜,故記之如下。 一、內部類的作用 內部類看起來是一種代碼隱藏機制:將類置於其他類的內部。它還了解外部類,並能與之通信;使用內部類可以實現閉包;內部
Java之靜態內部類(static class)
轉載請註明出處:http://riddickbryant.iteye.com/blog/555545 在一個類中建立另外一個類,叫做成員內部類。這個成員內部類可以靜態的(利用static關鍵字修飾),也可以是非靜態的。由於靜態的內部類在定義、使用的時候會有種種的限制。所以在實際工作中用到
靜態方法中不可直接new內部類例項物件問題
結論:靜態方法中,是不可以直接new內部類例項物件和引用外部類的成員變數的。 原因:1、外部類中的成員變數、方法以及內部類其實三者都在同一個級別上,三者都必須由外部類的例項物件才能呼叫(舉例:當一個方法被呼叫時,此時肯定已經有了外部類的例項物件。),故而他們三者可以互相引用。 2、而靜
java的靜態方法是不能直接new內部類的
因為靜態方法可以被類名.方法名()直接呼叫,可以說是“單例“的,內部類可以訪問外部類成員變數,如果靜態方法中new了同一個內部類的多個物件,就會出現 類名.方法名(多個物件操作同一個外部類變數或者方法的情況,出現“多個副本“,與“單例”規則不符,會出現方法邏輯問
靜態方法中使用內部類不能通過new
首先來看一下錯誤程式碼, public class TraditionalThreadSynchronized { public static void main(String[] arg
Java 中內部類、靜態內部類、列舉類
一、內部類 在另一個類中定義的類 內部類作用 1、內部類提供了更好的封裝。只能讓外部類直接訪問,不允許同一個包中的其他類直接訪問。 2、內部類可以直接訪問外部類的私有屬性,內部類被當成其外部類成員。當外部類不能訪問內部類的內部屬性。 內
靜態方法中不能new內部類的例項物件的總結
原文 class Test{ public void main(String[] args){ A testA=new A(); //這裡會出現問題 new Thread(new Runnable(){ public void run(){
java中載入及方法、內部類與成員的呼叫關係
/* *該例程測試了程式在最開始時的載入情況及成員的呼叫情況,載入順序為類→靜態成員→建立物件( *如果建立的話)。 *注意,載入類時,靜態成員是單獨載入到一處static程式碼塊中,後續將不再載入。因此使用效率 *也更高一些。其中,非靜態內部類和靜態內部類在最初均不載入,
Java中的static使用之靜態方法
與靜態變數一樣,我們也可以使用 static 修飾方法,稱為靜態方法或類方法。其實之前我們一直寫的 main 方法就是靜態方法。靜態方法的使用如: 1、 靜態方法中可以直接呼叫同類中的靜態成員,但不能
Java中內部類和靜態內部類的區別
內部類和靜態內部類 示例 public class OuterClass { private int numPrivate = 1; public int numPublic = 2; public static int numPublicStatic = 3; private
java之靜態屬性和靜態方法
person pri 技術分享 周期 銷毀 out 方法 class 屬性的區別 前言 靜態屬性和方法必須用static修飾符 靜態屬性和非靜態屬性的區別: 1、在內存中存放位置不同 所有帶static修飾符的屬性或者方法都存放在內存中的方法區 而非靜態屬性存放在內存
java中內部類使用小結
內部類的宣告與訪問 內部類可以是static的也可以用其它四種訪問修飾符(而外部類只能使用public和 default修飾)。內部類所能實現的功能外部類也同樣可以全部實現,只是使用內部類可以使其更加簡潔高效。 內部類是一個編譯時概念,一旦編譯成功就會變成兩個完全不同
Java中內部類的定義及使用
一、定義 1.在一個類的內部進行其他類結構的巢狀的操作。 例: class Outer{ private String msg = "Hello World!"; //定義一個內部類 //*********************************
java中靜態方法中為什麼不能使用this、super和直接呼叫非靜態方法
這個要從java的記憶體機制去分析,首先當你New 一個物件的時候,並不是先在堆中為物件開闢記憶體空間,而是先將類中的靜態方法(帶有static修飾的靜態函式)的程式碼載入到一個叫做方法區的地方,然後再在堆記憶體中建立物件。所以說靜態方法會隨著類的載入而被載入。當你new一個物件時,該物件存在於對
Java學習筆記之物件陣列和內部類
1、物件陣列 物件陣列就是數組裡包含的是一組物件,在使用之前,我們必須要先開闢陣列空間,一開始數組裡的每一個物件都是null值,在使用的時候,每一個物件都必須例項化。 1.1 物件陣列的宣告 類 物件陣列名稱 [] = new 類 [陣列長度] class Person{
JAVA中內部類的繼承和覆蓋問題
在JAVA中,由於內部類的構建器必須連線到指向其外圍類物件的引用,所以在繼承內部類的時候會變得很複雜。問題在於指向外圍類物件的祕密引用必須得到初始化,而在匯出類中不再存在可連線的預設物件,我們必須使用
類中內部類中的方法訪問外部類中變數的示例
class Day10_11 { public static void main(String[] args) { Outer.Inner oi = new Outer().new Inner(); oi.print()
java中內部類的訪問呼叫
從Java1.1開始引入了內部類以來,它就引起了人們的激烈爭論。其實任何優秀的語言特性用得不好就是濫用,內部類用得不好就會導致程式碼像迷宮一樣,導致出現毫無重用的綜合徵。1、內部類分為成員內部類、靜態巢狀類、方法內部類、匿名內部類。幾種內部類的共性:A、內部類仍然是一個獨立
解決JAVA中內部類所對應的外部類引用初始化的問題
java內部類的分類 java內部類的分類:成員內部類、區域性內部類、靜態內部類(巢狀類)、匿名內部類。 在構建內部類物件時,需要一個指向其外部類物件的引用,而且這種引用的傳遞是通過內部類的構造器來完成的。 如果編譯器訪問不到這個引用就會報錯。 CASE 1: // 用.n