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