如果我們嘗試輸出未進行初始化的成員變數時,會有什麼樣的情景發生?
直接上程式碼:
package components.javaTest.day3_20200826;
/**
* Question0003:
* 試著輸出未進行初始化的成員變數時,會有什麼結果?
*/
public class VariableInitialization {
public int a;
public static void main(String[] args) {
System.out.println("a:" + a);
}
}
大家可以先想一下,會有什麼樣的結果,“編譯報錯”、“0”、“null”...?
有了答案之後,我們看比真實結果:
可以看到編譯期間報錯了,
起初,沒有看提示,會不會是認為變數a沒有初始化導致編譯報錯了?
其實不是的:
根據英文提示,可以得知是由於a並不是由static修飾的變數,導致其無法被引用在環境當中。
既然是由於a是非靜態變數的緣故不能放在main方法裡面,我們將其用static關鍵字修飾,並且看看main方法的輸出結果:
package components.javaTest.day3_20200826; /** * Question0003: * 試著輸出未進行初始化的成員變數時,會有什麼結果? */ public class VariableInitialization { //public int a; public static int a; public static void main(String[] args) { System.out.println("a:" + a); } }
可以看到編譯通過,執行成功,並且列印結果是0,那麼問題來了:
a為什麼=0?,我們先記住下面這幾句真理
1.無論建立多少個物件,靜態資料都只佔用一份儲存區域
2.static關鍵字不能應用於區域性變數,即它只能作用於域(field)【成員變數、方法、類】
3.如果一個域是靜態的基本型別域,也沒有對它進行初始化,那麼它就會獲得基本型別的標準初值;如果他是一個物件引用,那麼它的初始化值就是null
這裡涉及到1個知識點,需要進行一次總結,就等下次吧,那就是“java物件的標準初始預設值的相關知識點總結”。
如果是非static修飾,但是並不是成員變數,而是在main方法中呢?
package components.javaTest.day3_20200826; /** * Question0003: * 試著輸出未進行初始化的成員變數時,會有什麼結果? */ public class VariableInitialization { //public int a; //public static int a; public static void main(String[] args) { int a; System.out.println("a:" + a); } }
可以看到編譯器是報錯了,提示a變數未曾初始化。
也就是
在java裡面,一個物件如果沒有初始化,是不能夠被使用的,如果強行使用未被初始化的物件,編譯時就會報錯
【在沒有找到反例之前,暫時可以理解它也是一條真理】
每日1道面試題分析,就到這,我們明天見!
非 淡 泊 無 以 明 志
非 寧 靜 無 以 致 遠 !