如果我們嘗試輸出未進行初始化的成員變數時,會有什么樣的情景發生?
直接上代碼:
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道面試題分析,就到這,我們明天見!
非 淡 泊 無 以 明 志
非 寧 靜 無 以 致 遠 !
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/45084.html
標籤:Java
