㈠ java里初始化是什麼意思
初始化就是給抄變數一個初始值。
例如:
聲明一個變數:String aa = "abc";int cc =0;其中abc和0就是初始化的值,最後值不一定是abc或者 0加入你覆蓋了aa的值如下:
aa = "def" ; cc=1;那最後aa變數的值就是def,cc變數就是1了,初始化的目的是為了讓變數有值,防止使用時出現異常。
作用
1、遇到new,getstatic,putstatic,或invokestatic這4條位元組碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化。生成這四條指令單最常見的Java代碼場景是:
使用new關鍵字實例化對象的時候,讀取或設置一個類的靜態欄位(被final修飾,已在變異期把結果放入常量池的靜態欄位除外)的時候,以及調用一個類的靜態方法的時候。
2、使用java.lang.reflect包的方法對類進行反射調用的時候,如果類沒有進行過初始化,則需要先出法其初始化。
3、當初始化一個類的時候,如果發現其父類還沒有進行初始化,則需要先出法其父類的初始化。
4、當虛擬機啟動時,用戶需要指定一個要執行的主類(包含main()方法的那個類),虛擬機會先初始化這個主類。
㈡ Java數組初始化,這三種方式有什麼區別
創建數組的三種方式:其實分為2類,一種是靜態的創建,如方式一。一種是動態的創建,只不過根據寫法的不同分為方式二和方式三:
[java] view plain
public static void main(String[] args) {
// 1.方式一 聲明 分配空間並賦值
int[] arr1 = {1,2,3};
// 2.方式二 顯示初始化
int[] arr2;
arr2 = new int[]{1,2,3};
// 3.方式三 顯示初始化()
int[] arr3;
arr3 = new int[3];
}
他們的區別,方式一:在聲明的時候直接就已經分配空間,並賦值,方式一是不能寫成如下這種形式的。
[java] view plain
int[] arr1;
arr1 = {1,2,3};//錯誤寫法 編譯不同過
方式二和方式三,聲明和內存分配是分開的,如上面的例子,
[java] view plain
int[] arr2; 和 int[] arr3;
這一步是在棧空間分配一個引用,存放的是一個引用,null
[java] view plain
arr2 = new int[]{1,2,3};<span style="font-family: Arial, Helvetica, sans-serif;">arr3 = new int[3];</span>
到這一步的時候jvm才開始在內存堆區域分配空間,並賦值,方式二直接賦值 1,2,3 方式三 默認初始化,基本類型是 0 布爾類型是 false 引用類型為null,
註:內存一旦分配不能改變,所有說數組長度固定
㈢ java中創建對象了,顯示初始化值和構造函數初始化對象的區別先後執行順序是什麼
兩個都可以初始化值,本質上沒有區別,不同的是執行的先後。構造方法初始化值時需要包含有參的構造方法,創建對象時使用Object obj = new Object(arg1,arg2)的形式,你說的顯示初始化值應該是使用set方法吧,比如obj.setArg1(arg1)的形式。執行順序肯定是構造方法的形式要在前了,因為在對象創建之後就會給屬性賦值,而set方法形式賦值只會在你調用set方法時才會賦值。
再插一點題外話:其實在對象創建時成員變數已經初始化了,只是初始化的都是變數對應類型的默認值,比如int類型的默認值是0,引用類型默認值是null,boolean類型默認值是false。