㈠ 關於java靜態初始化器的一個小問題。
靜態變數和靜態塊只在類載入的時候載入,有且只載入一次,所以創建s1時兩個列印語句執行,但後面的s2創建時列印語句就不會再執行了
㈡ 關於Java顯示的靜態初始化
static{ cup1=new Cup(1);cup2=new Cup(2);} 這個就是java里的靜態成員初始化語法。不是方法,只是給靜態成員數據賦初始值。
Cup.cup1.f(99)可以看成兩部分:
x = Cup.cup1 這是取出Cup類中的靜態成員數據cup1,這里稱之x
x.f(99) 這是調用對象x的成員函數f
㈢ java中靜態初始化和動態初始化
靜態初始化就是static,動態初始化就是new
所謂的靜態和動態是相對於程序運行是而言的,靜態是在程序編譯時就初始化好了的,動態初始化是在程序運行是才動態分配內存空間,
我覺得已經夠通俗的了
㈣ java 靜態數據初始化
從主類public class StaticInitialization 中的開始main函數開始。
在初始化對象時,開始 靜態數據的初始化
譬如:
執行完
public class StaticInitialization {
public static void main(String[] args) {
System.out.println(
"Creating new Cupboard() in main");
後,然後
執行new Cupboard();這段代碼
這時,程序就會跳到Cupboard這個類中,當實例化Cupboard這個類的對象的時候,Cupboard這個類的裡面靜態數據也同時被處理。
剩下的代碼都一樣。
㈤ 關於JAVA中static初始化問題
java虛擬機在首次主動使用類型的時候才會初始化(lazy-load的形式),主動使用包括以下6種情況
1. 創建類的實例
2. 調用類的靜態方法
3. 操作類的非常量靜態欄位(非final static)
4. 調用特定的反射方法
5. 初始化一個類的子類
6. 指定一個類為虛擬機啟動時的初始化類
所以說,你必須主動使用到這個類,這個類才會被初始化,這就能解釋第一次有輸出,而第二次沒有輸出的情況了
另外,值得一提的是,載入和初始化不是一個概念,比如,在main函數中寫
Table a = null;
一樣不會有輸出。。Table類被載入了但是沒有被初始化,因為這不屬於上述6種「主動使用」情況之一,不信試試。。。
㈥ java靜態初始化器對什麼進行初始化
java靜態初始化器對static進行初始化。
所謂的靜態和動態是相對於程序運行是而言的,靜態是在程序編譯時就初始化好了的,動態初始化是在程序運行是才動態分配內存空間。
static變數初始值一定要是常量。static變數中文名叫靜態變數。位置靜態局部變數被編譯器放在全局存儲區.data,所以它雖然是局部的,但是在程序的整個生命周期中存在。
作用:
對於靜態全局變數來說,針對某一源文件的以static聲明的文件級變數與函數的作用域只限於文件內(只在文件內可見),也即「內部連接」,因而可以用來限定變數的作用域。
對於靜態局部變數來說,在函數內以static聲明的變數雖然與自動局部變數的作用域相同(即作用域都只限於函數內)。
但存儲空間是以靜態分配而非默認的自動分配方式獲取的,因而存儲空間所在區域不同,且兩次調用間變數值始終保持一致;必須注意,靜態局部變數只能初始化一次,這是由編譯器來保證實現。
對於靜態成員變數來說,在C++中,在類的定義中以static聲明的成員變數屬於類變數,也即在所有類實例中共享,與之相對的就是過程變數。
㈦ java 中靜態內部類欄位什麼時候初始化
不是的,只有在載入內部類的時候才初始化 //有問題可以繼續交神瞎租流x0dx0a樓主只要看懂一下的代碼x0dx0a那麼對於類的載入x0dx0a基本上就沒問神埋題了x0dx0a最後類的載入過程的解釋x0dx0apublic class Test6 {x0dx0a public static void main(String[] args){x0dx0a new B();x0dx0a new A.C();x0dx0a }x0dx0a}x0dx0ax0dx0aclass A{x0dx0a private P p1 = new P("A--p1");x0dx0a static P p3 = new P("A--p3");x0dx0a public A(){x0dx0a System.out.println("A()");x0dx0a }x0dx0a private P p2 =new P("A--p2");x0dx0a static{x0dx0a new P("A--static"); x0dx0a }x0dx0a {new P("A{...}");}x0dx0a x0dx0a public static class C {x0dx0a private P p1 = new P("C--p1");x0dx0a static P p3 = new P("C--p3");x0dx0a public C(){x0dx0a System.out.println("C()");x0dx0a }x0dx0a private P p2 =new P("C--p2");x0dx0a static{x0dx0a new P("C--static"); x0dx0a }x0dx0a {new P("C{...}");}x0dx0a }x0dx0a}x0dx0ax0dx0aclass B extends A {x0dx0a private P p1 = new P("B --p1");x0dx0a static P p3 = new P("B -- p3");x0dx0a public B() {x0dx0a System.out.println("B()"); x0dx0a }x0dx0a public P p2 = new P("B -- p2");x0dx0a static {x0dx0a new P("B -- static");x0dx0a }x0dx0a x0dx0a {new P("B{...}");}x0dx0a}x0dx0ax0dx0aclass P {x0dx0a public P(String s) {x0dx0a System.out.println(s);x0dx0a } x0dx0a}x0dx0a/*x0dx0a x0dx0a有父類的情況x0dx0a1. 載入父類x0dx0a 1.1 為靜態屬性分配存儲空間並賦初始值 x0dx0a 1.2 執行靜態初始化塊和靜態初始化語句(從上至下)x0dx0a2. 載入子類x0dx0a 2.1 為靜態屬性分配存儲空間x0dx0a 2.2 執行靜態游兆初始化塊和靜態初始化語句(從上至下)x0dx0a3. 載入父類構造器x0dx0a 3.1 為實例屬性分配存數空間並賦初始值 x0dx0a 3.2 執行實例初始化塊和實例初始化語句x0dx0a 3.3 執行構造器內容x0dx0a4. 載入子類構造器x0dx0a 4.1 為實例屬性分配存數空間並賦初始值 x0dx0a 4.2 執行實例初始化塊和實例初始化語句x0dx0a 4.3 執行構造器內容x0dx0a5 回到main()x0dx0a內部類的載入過程也一樣x0dx0a*/