1. 程式人生 > >面試題0003-試著輸出未進行初始化的成員變數時,會有什麼結果?

面試題0003-試著輸出未進行初始化的成員變數時,會有什麼結果?

如果我們嘗試輸出未進行初始化的成員變數時,會有什麼樣的情景發生? > 直接上程式碼: ```java 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方法的輸出結果: > > ```java > 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方法中呢? > > ```java > 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道面試題分析,就到這,我們明天見! --- ---
非  淡  泊  無  以  明  志
非 寧 靜 無 以 致 遠 !