首先看一個小程序:
public class DefaultTest {
public static void main(String[] args) {
int num;
System.out.println(num);
}
}
這個程序首先是編譯通不過的,所以不能打印出想象中的0.
分析:num的初始值是0不假,但是這個num是main方法的局部變量,系統根本沒有給它賦予默認值的機會。所以這是錯誤的。也就是說即使一個變量有初始值,那也得讓系統有給它賦值的機會(比如,初始化的時候)。有默認的初始值和已經給變量賦值是兩個不同的概念.Java爲所有的成員變量提供了默認初始化,局部變量需要自己初始化.此處定義的num是局部變量,在編譯時是不會被默認初始化的,必須得顯示的進行初始化才行;如果是實例變量的話,就會在編譯的時候進行默認的初始化,即爲0。
所以要輸出num的默認值0,正確的寫法應可以是以下三種方式:
public class DefaultTest {
public static void main(String[] args) {
int num =0 ;
System.out.println(num);
}
}
public class DefaultTest {
int num;
public static void main(String[] args) {
DefaultTest test = new DefaultTest();
System.out.println(test.num);
}
}
public class DefaultTest {
static int num;
public static void main(String[] args) {
System.out.println(num);
}
}