本文目錄一覽:
java對象中的初始化順序
對於一個類的初始化步驟:
1
static靜態的變數定義;
2
static塊里的代碼執行,static變數也是在此刻初始化的
3
非static變數定義
4
構造器
5
非static變數初始化
比如:
class
test{
private
static
int
a=1;
private
int
b=1;
public
test(){
b=2;
}
}
執行new
test();的時候編譯後代碼順序為:
private
static
int
a;
static{
a=1;
}
{
private
int
b;
}
public
test(){
b=1;
b=2;
}
ps:有句口訣叫靜靜動構動構…..
就是類初始化順序,意思是:
靜靜只有類第一次載入執行,靜態變數定義–靜態塊
動構就是,非static的定義初始化。我上面的代碼位置調換中b=1是相當與在那個位置執行
java中為什麼要為類的屬性初始化?
1. 對於類的成員變數,不管程序有沒有顯式的進行初始化,Java虛擬機都會先自動給它初始化為默認值。 \x0d\x0a 默認值如下:\x0d\x0a\x0d\x0a Boolean false\x0d\x0a\x0d\x0a Char ‘\u0000′(null)\x0d\x0a\x0d\x0a byte (byte)0\x0d\x0a\x0d\x0a short (short)0\x0d\x0a\x0d\x0a int 0\x0d\x0a\x0d\x0a long 0L\x0d\x0a\x0d\x0a float 0.0f\x0d\x0a\x0d\x0a double 0.0d\x0d\x0a2. 局部變數聲明之後,Java虛擬機就不會自動給它初始化為默認值,因此局部變數的使用必須先經過顯式的初始化。\x0d\x0a 但是需要聲明的是:對於只負責接收一個表達式的值的局部變數可以不初始化,參與運算和直接輸出等其它情況的局部變數需要初始化。
什麼時候進行java類的初始化
java中類的顯示初始化會在首次被「主動使用」時執行初始化,為類(靜態)變數賦予正確的初始值。在Java代碼中,一個正確的初始值是通過類變數初始化語句或者靜態初始化塊給出的。而我們這裡所說的主動使用 包括:
1. 創建類的實例
2. 調用類的靜態方法
3. 使用類的非常量靜態欄位
4. 調用Java API中的某些反射方法
5. 初始化某個類的子類
6. 含有main()方法的類啟動時
初始化一個類包括兩個步驟:
1、 如果類存在直接父類的話,且直接父類還沒有被初始化,則先初始化其直接父類
2、 如果類存在一個初始化方法,就執行此方法
註:初始化介面並不需要初始化它的父介面。
Java類的初始化是什麼時候?
我們知道一個類(class)要被使用必須經過裝載,連接,初始化這樣的過程。下面先對這三階段做一個簡單的描述,之後會結合一個簡單的例子來說明java中類的初始化過程。
在裝載階段,類裝載器(Bootstrap ClassLoader 或者用戶自定義的ClassLoader) 把編譯形成的class文件載入內存,創建類相關的Class對象,這個Class對象封裝了我們要使用的類的類型信息。
連接階段又可以分為三個子步驟:驗證、準備和解析。
驗證就是要確保java類型數據格式 的正確性,並適於JVM使用。
準備階段,JVM為靜態變數分配內存空間,並設置默認值,注意,這裡是設置默認值,比如說int型的變數會被賦予默認值0 。在這個階段,JVM可能還會為一些數據結構分配內存,目的 是提高運行程序的性能,比如說方法表。
解析過程就是在類型的常量池中尋找類、介面、欄位和方法的符號引用,把這些符號引用替換成直接引用。這個階段可以被推遲到初始化之後,當程序運行的過程中真正使用某個符號引用的時候 再去解析它。
類會在首次被「主動使用」時執行初始化,為類(靜態)變數賦予正確的初始值。在Java代碼中,一個正確的初始值是通過類變數初始化語句或者靜態初始化塊給出的。而我們這裡所說的主動使用 包括:
1. 創建類的實例
2. 調用類的靜態方法
3. 使用類的非常量靜態欄位
4. 調用Java API中的某些反射方法
5. 初始化某個類的子類
6. 含有main()方法的類啟動時
初始化一個類包括兩個步驟:
1、 如果類存在直接父類的話,且直接父類還沒有被初始化,則先初始化其直接父類
2、 如果類存在一個初始化方法,就執行此方法
註:初始化介面並不需要初始化它的父介面。
Java中類的初始化順序是什麼?
執行順序應該是:首先是父類靜態塊 — 然後是子類靜態塊 — 父類自由塊 — 父類構造函數塊 — 子類自由塊 — 子類構造函數塊
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/283644.html