非靜態內部類中為什麼不能擁有靜態成員?
java類載入順序,首先載入類,執行static變數初始化,接下來執行物件的建立,如果我們要執行程式碼中的變數int a 初始化,那麼必須先執行載入外部類,再載入內部類,最後初始化靜態變數 a ,問題就出在載入內部類上面,我們可以把內部類看成外部類的非靜態成員,它的初始化必須在外部類物件建立後以後進行,要載入內部類必須在例項化外部類之後完成 ,java虛擬機器要求所有的靜態變數必須在物件建立之前完成,這樣便產生了矛盾。
而java常量放在記憶體中常量池,它的機制與變數是不同的,編譯時,載入常量是不需要載入類的,所以就沒有上面那種矛盾。
其實常量使用是很隨意的,內部類,靜態內部類,匿名內部類就亂了。
但瞭解JVM特性你就知道有些地方為什麼不讓你這麼用了。
相關推薦
非靜態內部類中為什麼不能擁有靜態成員?
java類載入順序,首先載入類,執行static變數初始化,接下來執行物件的建立,如果我們要執行程式碼中的變數int a 初始化,那麼必須先執行載入外部類,再載入內部類,最後初始化靜態變數 a ,問題就出在載入內部類上面,我們可以把內部類看成外部類的非靜態成員,它的初
java-為什麼非靜態內部類中不能有static修飾的屬性,但卻可以有final常量?
- 例: 1 public class Demo{ 2 int x; 3 class A{ 4 static int a = 0; //這樣寫是不合法的. 5 static final int b=0; //這樣寫是合法的 6
java-為什麽非靜態內部類中不能有static修飾的屬性,但卻可以有final常量?
static變量 虛擬機 修飾 要求 public col 什麽 常量 logs - 例: 1 public class Demo{ 2 int x; 3 class A{ 4 static int a = 0; //這樣寫是不合法
《為什麼非靜態內部類中不能有static屬性的變數,卻可以有static final屬性的變數?》
每當我們翻閱有關Java的入門書籍,進入關於內部類的章節時,我們經常可以看到某某書上寫道: ——非靜態實名內部類(成員內部類)中不能含有static修飾的變數,但是可以含有st
怎麼想靜態內部類可以有靜態成員和方法而成員內部類不行?
因為:(沒有理論依據,純粹是為了尋找一個思想依據) 1、成員內部類:在沒有產生外部類物件的情況下,內部類是不可能被訪問到的,即(外部類類名).(內部類類名)是不可能的,只能通過外部類的物件名來訪問!既然是屬於外部類物件的,那內部類屬性就不能提前部署在記憶體中啦,所以就不能有
為什麼內部類中有static成員時內部類也必須宣告為static
如果A和B類關係緊密,且A類的主要作用是幫助完成B類的實現,這時可將A類作為B類的內部類,兩個類可以互相訪問各自的私有成員,這樣就方便B類的設計,使B類更加自給自足(self contained)。http://www.tanhuanyao.com h
Javaz中,成員內部類的常見修飾符及應用 && 成員內部類不是靜態的,訪問的格式
pri http col 格式 png log 註意 color 必須 成員內部類的常見修飾符及應用: private 為了保證數據的安全性 static 為了方便訪問數據 註意:靜態的內部類訪問外部類的數據時,外部類的數據必須用靜態修
Java非靜態內部類和靜態內部類,訪問父類的非靜態和靜態成員變數及成員函式
public class Test { // Not static variable private int mAge = 10; // Static variable private static int mId = 1; // Single inst
靜態內部類和訪問非靜態成員變數
靜態內部類訪問包含它的外部類的非靜態成員變數時,可以通過new外部類().成員的方式訪問,這是因為靜態的只能訪問靜態的,因為他們在物件沒建立前就存在了。如果想訪問非靜態的則必須初始化該物件,因為只有初始化後物件在記憶體才存在(靜態的除外)
Java中靜態成員類及靜態內部類的Builder模式構建物件、靜態內部類構建單例模式
一、什麼是巢狀類 巢狀類是指被定義在另一個類的內部的類。巢狀類存在的目的應該只是為他的外圍類提供服務。如果巢狀類將來可能會用於其他的某個環境中,它就應該是頂層類。巢狀類有四種:靜態成員類、非靜態成員類、匿名類和區域性類。除了第一種之外,其他三種被稱為內部類。
非靜態內部類為什麼可以訪問外部類的靜態成員
非靜態內部類物件寄生於外部類物件,inn呼叫test()方法時,知道自己呼叫的是它寄生的物件所屬類的類成員; 在階段一:類載入的時候沒有建立外部類物件,但是方法是知道要呼叫的是外部類的類成員,已經確定了 在第二階段:建立非靜態內部類物件,該物件必須寄生於外部類物件,它知道要
Java中靜態成員變數,靜態程式碼塊,靜態內部類何時被初始化?
關於這個問題,本文不扯理論,直接上程式碼,通過結果來驗證結論,廢話少說,測試程式碼如下: public class StaticTest { public static StaticMember staticMember = new Static
Java非靜態內部類為什麼不能有靜態成員
對於java類載入順序我們知道,首先載入類,執行static變數初始化,接下來執行物件的建立,如果我們要執行程式碼中的變數i初始化,那麼必須先執行載入OuterClass,再載入Innerclass,最後初始化靜態變數i,問題就出在載入Innerclass上面,我們可以把
Java內部類(3):非靜態內部類為什麼不能有靜態成員變數和靜態方法。
首先要明白以下三點: static型別的屬性和方法,在類載入的時候就會存在於記憶體中。 要想使用某個類的static屬性和方法,那麼這個類必須要載入到虛擬機器- 中。 非靜態內部類並不隨外部類一起載入,只有在例項化外部類之後才會載入。 現在考慮這個情
Java-為什麼非靜態內部類裡面不能定義靜態方法、靜態成員變數、靜態初始化塊?
首先要明確一點: static修飾方法、成員變數是屬於類自己的。並不屬於特定的某個物件。所以我們可以像這樣使用static修飾的方法、變數:ClassName.methodName、ClassName
java非靜態內部類為何不能有靜態的成員?
1,部落格---記錄自己的點滴成長 2,最近接觸到關鍵字這一塊,遇到一比較棘手的問題---java非靜態內部類為何不能有靜態(static)的成員? 3,首先解釋幾個概念: 1)內部類---顧名思義,內部類就是在一個類(外部類)的內部再定義一個類(內部類),這個
成員內部類中為什麼不能有靜態方法和屬性
非靜態內部類不能有靜態成員!成員內部類必須先例項化外部類物件然後再例項化成員內部類;非static的內部類,在外部類載入的時候,並不會載入它,所以它裡面不能有靜態變數或者靜態方法。1、static型別的屬性和方法,在類載入的時候就會存在於記憶體中。2、要使用某個類的stati
非靜態內部類為什麼不能有靜態成員
http://www.iteye.com/topic/6599591.我的理解,因為靜態的東西是在編譯的時候就要有記憶體空間的,但是不是靜態的東西只有當例項化的時候才會分配空間,如果你在非靜態方法裡面包含了靜態的東西,這個方法還沒有去分配空間,怎麼又能為裡面的變數去分配空間呢
Java中Static Class及靜態內部類和非靜態內部類與靜態導包
上次有朋友問我,java中的類可以是static嗎?我給他肯定的回答是可以的,在java中我們可以有靜態例項變數、靜態方法、靜態塊。當然類也可以是靜態的,下面小編整理了些關於java中的static class相關資料分享在指令碼之家平臺供大家參考 java中的類可以是
靜態內部類和非靜態內部類的區別
依賴 table width idt 靜態屬性 bsp 訪問 實例化 外部 靜態屬性和方法 訪問外部類的屬性和方法 實例化 靜態內部類 有 只能訪問靜態的 依賴於外部類的實例 非靜態內部類 無 所有 可以直接實例化 靜態內部類和非靜態內部類的區別