回覆列表
-
1 # IT人劉俊明
-
2 # 會點程式碼的大叔
我認為用之前判斷是不是為null最保險;當然這個不是用於判斷一個變數有沒有被初始化的方法。
成員變數虛擬機器會自動初始化,如果是引用型會被預設null,其實也是初始化了,只不過初始化為null,用之前判斷下非null。區域性變數好說,不初始化編譯過不去。
成員變數類裡定義的變數,但在方法、構造方法和語句塊之外。
類變數:就是以static修飾的,這個好說,系統根據我們的需求,在不同的位置進行初始化。
例項變數:不以static修飾的,不管程式有沒有顯示的初始化,虛擬機器都會自動初始化為預設值,隨著當前物件的建立而建立,隨著物件的銷燬而銷燬,存在於物件所在的堆記憶體中。整數型別預設0,浮點型預設0.0f/0.0d,布林型預設false,引用型預設null。
區域性變數形參:就是入參變數
方法區域性變數:方法內
程式碼塊區域性變數:程式碼塊內
對於區域性變數,必須先經過顯式初始化,才能使用。如果編譯器確認一個區域性變數在使用之前可能沒有被初始化,編譯器將報錯。
這是一個非常好的問題,Java屬性(變數)的初始化問題是一個值得深究的問題,從中我們也能瞭解Java語言的一些重要機制。因為Java的屬性既存在變數,也存在常量,所以叫屬性會更確切一些。
Java屬性本身並不存在C語言類似的問題,也就是說Java語言的變數初始化有一套嚴格的要求,這套嚴格要求的背後就是不允許存在未經初始化的屬性(變數)被使用(呼叫)的情況發生,因為這種情況往往會帶來巨大的風險(失控),對於一個以安全著稱的語言來說,訪問未經初始化的屬性一定是會被禁止的,或者說在Java中根本不存在這樣的渠道(正常情況下)。
Java中的屬性可以簡單的分為成員屬性和區域性屬性兩種,大的原則是成員屬性自動初始化,而區域性屬性則需要在使用前手動初始化,我們看一個例子:
在成員屬性中還有兩個比較特殊的情況,一個情況是static屬性,另一個情況是final屬性。static屬性的初始化要先於普通成員屬性,因為static屬性是“隨類載入”,static屬性的初始化位置會根據具體的情況來完成,而普通成員屬性的初始化最終都是在構造器中完成的(與賦值的具體位置沒有關係),看一個例子:
final修飾的成員屬性是有明確要求的,也就是說必須手動初始化,要麼在定義時直接賦值,要麼在構造器中完成初始化,否則是不予編譯透過的,另外,所有final成員屬性是在類體中完成初始化的(與賦值的具體位置沒有關係),看一個例子:
最後,區域性屬性必須在使用前賦值,可以定義final型的區域性屬性,但是不允許定義static型的區域性屬性,但是static內部類中是可以定義static屬性的,看一個例子:
總之,透過對Java屬性的初始化特點進行了解,對掌握Java語言有非常大的幫助。
如果有Java方面的問題,也可以諮詢我。