㈠ java裡面什麼叫為屬性初始化
初始化根據字面意思比較容易理解 就是給屬性賦一個初始值
比如你定義了一個屬性整型的age:
private int age; //這樣算是定義了一個 但是並沒有初始化
private int age=20;//這樣才算初始化
如果你在調用時 又沒初始化它 有時候就會出現問題 比如:
public class Test {
public static void main(String...args){
int a;
System.out.println(a);//編譯出錯 變數a沒有初始化
}
}
基本數據類型作為類成員變數,無論初始化與否都不會出錯。
作為函數代碼里的變數,無論什麼類型不初始化全部都會報錯。
比如下面這樣就不會報錯了
public class Test {
private int a;
public void print(){
System.out.println(a);
}
public static void main(String...args){
Test t = new Test();
t.print();
}
}
不過你要問的是什麼是初始化啊 哈哈 看最前面一點就行了 後面看著糊塗就先暫時不用管吧 學到後面的時候 你再回過頭來看 自然就懂了
㈡ java中為什麼要為類的屬性初始化
你好,初始化可以使類一產生對象就擁有自身的屬性值。
比如創建一個人初始化他的名字,年齡等。
一創建人這個對象就擁有名字年齡等屬性值。
當然也可以不初始化,在需要的時候調用方法進行初始化。
如果滿意,請採納,謝謝。
㈢ 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 變數到底要如何初始化
不同的變數初始化方法不同。
變數包括:
類的屬性,或者叫值域
方法里的局部變數
方法的參數
對於第一種變數,Java虛擬機會自動進行初始化。如果給出了初始值,則初始化為該初始值。如果沒有給出,則把它初始化為該類型變數的默認初始值。
int類型變數默認初始值為0
float類型變數默認初始值為0.0f
double類型變數默認初始值為0.0
boolean類型變數默認初始值為false
char類型變數默認初始值為0(ASCII碼)
long類型變數默認初始值為0
所有對象引用類型變數默認初始值為null,即不指向任何對象。注意數組本身也是對象,所以沒有初始化的數組引用在自動初始化後其值也是null。
對於兩種不同的類屬性,static屬性與instance屬性,初始化的時機是不同的。instance屬性在創建實例的時候初始化,static屬性在類載入,也就是第一次用到這個類的時候初始化,對於後來的實例的創建,不再次進行初始化。這個問題會在以後的系列中進行詳細討論。
對於第二種變數,必須明確地進行初始化。如果再沒有初始化之前就試圖使用它,編譯器會抗議。如果初始化的語句在try塊中或if塊中,也必須要讓它在第一次使用前一定能夠得到賦值。也就是說,把初始化語句放在只有if塊的條件判斷語句中編譯器也會抗議,因為執行的時候可能不符合if後面的判斷條件,如此一來初始化語句就不會被執行了,這就違反了局部變數使用前必須初始化的規定。但如果在else塊中也有初始化語句,就可以通過編譯,因為無論如何,總有至少一條初始化語句會被執行,不會發生使用前未被初始化的事情。對於try-catch也是一樣,如果只有在try塊里才有初始化語句,編譯部通過。如果在catch或finally里也有,則可以通過編譯。總之,要保證局部變數在使用之前一定被初始化了。所以,一個好的做法是在聲明他們的時候就初始化他們,如果不知道要出事化成什麼值好,就用上面的默認值吧!其實第三種變數和第二種本質上是一樣的,都是方法中的局部變數。只不過作為參數,肯定是被初始化過的,傳入的值就是初始值,所以不需要初始化。
㈤ java中屬性的初始化方法
屬性的類型不同初始化的方法也不一樣吧。除了Java的內建類型以為的數據類型初始化的話都是用new關鍵字來實現的。
㈥ 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中一個類的屬性何時初始化解決辦法
你好,初始化可以使類一產生對象就擁有自身的屬性值。 比如創建一個人初始化他的名字,年齡等。 一創建人這個對象就擁有名字年齡等屬性值。 當然也可以不初始化,在需要的時候調用方法進行初始化。
㈧ java中為什麼要為類的屬性初始化
1. 對於類的成員變數,不管程序有沒有顯式的進行初始化,Java虛擬機都會先自動給它初始化為默認值。
默認值如下:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
2. 局部變數聲明之後,Java虛擬機就不會自動給它初始化為默認值,因此局部變數的使用必須先經過顯式的初始化。
但是需要聲明的是:對於只負責接收一個表達式的值的局部變數可以不初始化,參與運算和直接輸出等其它情況的局部變數需要初始化。
㈨ java的屬性的初始化方法 是怎樣的
初始化就是在變數的後面附值。對於對象的初始化,一般是要用到關鍵字new,如果沒有學到對象的話,還是不用記的,這時的初始化還包含於實例化,但實例化還是有一種方法就是將變數或這方法用關鍵字static該它定義為靜態,這樣也是一種實例化的ff。如果聽不懂還是先不要急,只要知道是在變數後賦值就行
㈩ java@notnull標注的屬性必須在構造函數里初始化嗎
不是。java是一種面向對象的編程語言,語言中的null構造函數是不能去初始化屬性的,但是可以用notnull進行委託。