1. 程式人生 > >關於String s是否預設初始化

關於String s是否預設初始化

答案:C

解析:方法中的區域性變數必須手動初始化,否則會編譯報錯。

那麼也就說,全域性變數不需要手動初始化,JVM會自動初始化null或0

public class Test00001{
     static String s;
     String x="a";
     String y;
     /*string型別在程式碼中屬於區域性變數,那麼區域性變數必須賦值,哪怕是null,否則編譯通不過的,
      * 會提示說此變數未初始化,如果是類的成員變數,則可以不賦值,它會有預設值的。
java為了規避一些執行期間的空指標錯誤,都會強調區域性變數必須賦值,
否則編譯器會立即報錯,提示使用者修改。 */
    public static void main (String[] args){

        Test00001 t = new Test00001();
        System.out.println(t.s);//輸出null
        System.out.println(t.x);//輸出a
        System.out.println(y);//報錯,沒有初始化,或者不是類靜態變數
        //方法中不能呼叫類的非靜態變數屬性??哪怕已經初始化.
        System.out.println("s=" + s);//輸出null

    }

}
但是又產生一個新的問題,很重要

       類的靜態方法(函式)中為什麼不能呼叫非靜態成員?

       程式最終都將在記憶體中執行,變數只有在記憶體中佔有一席之地時才能被訪問。

       類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配記憶體,可以通過類名直接去訪問;非靜態成員屬於類的物件,所以只有在類 
       的物件產生(建立類的例項)時才會分配記憶體,然後通過類帆軟物件(例項)去訪問。

       在一個類的靜態成員中去訪問其非靜態成員之所以會出錯是因為在類的非靜態成員不存在的時候類的靜態成員就已經存在了,訪問一個記憶體中不

        存在的東西當然會出錯。