7.1.2フィールドとゾーン変数の初期値

6999 ワード

フィールドと領域変数の別の違いは、初期値です.フィールドは直接初期化する必要がなく、強制的に初期化されます.逆に、領域変数を直接初期化しない場合、ストレージ領域は空のままであるため、値の出力を試みたときにエラーが発生します.これは、フィールドと領域変数の違いではなく、それぞれのメモリ領域の特徴です.hipメモリは空白を格納できないため、hipメモリにあるフィールドは強制初期化され、スタックメモリは強制初期化されないため、ここに格納されている領域変数にも特徴があります.

次の例では、フィールドm、n、および領域変数kを初期化しない.初期化されていない領域変数を出力しようとするとエラーが発生しますが、intデータ型の2つのフィールドから値0が出力されます.フィールドが強制的に初期化されるためです.
class A {
    int m;
    int n;

    void work1() {
        int k;
        //System.out.println(l); // 초깃값 없이 출력을 시도해 오류 발생
    }
}

public class jh {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.m); // 0
        System.out.println(a.n); 
        // a.work1();
    }     
}
5章で述べたように,強制初期化値はフィールドのデータ型によって異なる.基本データ型の場合、「いいえ」と呼ばれるデータ型をfalseにリセットし、整数型を0にリセットし、実数型を0.0にリセットします.それ以外に、すべてのリファレンスタイプは、任意の場所を指すnull値がないことを示すように初期化されます.

実習

class A {
   boolean m1;
   int m2;
   double m3;
   String m4;
   void printFieldValue() {
       System.out.println(m1);
       System.out.println(m2);
       System.out.println(m3);
       System.out.println(m4);
       // 필드는 초기화하지 않아도 값이 강제 초기화돼 출력 가능
   }
   void printLocalVariable() {
       int k;
       // System.out.println(k); // 지역 변수를 초기화하지 않아 오류 발생
   }
}

public class jh {
    public static void main(String[] args) {
        // 클래스를 활용해 객체 생성
        A a = new A();
        // 객체 활용 
        a.printFieldValue();
    }
}
結果