0

静的変数:クラス変数であり、クラスのオブジェクトごとに個別に作成されません。
インスタンス変数:クラス変数でもありますが、オブジェクトごとに個別に作成されます。
上記の定義は参考用です。

このクラス宣言でエラーが発生する理由を説明してください。xを初期化していないからだとわかります。

class non_static{
public static void main(String args[])
{
int x;
System.out.println(x);

}
}

しかし、このクラス宣言はまったく問題ありません。

class static_example{
static int x;
public static void main(String args[])
{
System.out.println(x);
}

}

そして、このプログラムの出力は0です。

ローカル変数がデフォルト値ではないのに静的メンバーがデフォルト値で初期化される理由を説明してください。

4

4 に答える 4

5

静的宣言とインスタンス宣言とは何の関係もありません。これはローカル宣言であり、デフォルトはなく、初期化せずに使用するとエラーが発生します。

public class Example {
    private static int stattic;
    private int instancee;

    public void someMethod() {
        System.out.println("I am static and 0: " + stattic);
        System.out.println("I am not static and 0: " + instancee);

        int locall;

        System.out.println("I am causing an error because I have not been initialized: " + locall);
    }
}
于 2012-07-12T18:26:34.683 に答える
2

Javaがそのように指定する理由の背景を知りたい場合は、静的コード分析の限界を超えて実行する必要があります。スタックから割り当てられたメモリ(およびこれはローカル変数が存在する場所)は、使用前に初期化されるコンパイラによって確実に確認できます。ヒープに割り当てられたストレージ(静的変数、インスタンス変数)ではそうではありません。これが、JLSが実装に、ポインタを公開する前にヒープストレージを常にゼロにすることを要求する理由です。

于 2012-07-12T18:35:47.503 に答える
1

ローカル変数は常に値で初期化する必要があります。非ローカル変数(つまり、インスタンス変数または静的変数)の場合、デフォルトは、対応するタイプのnull値(null、ゼロ、またはfalse)として定義されます。

于 2012-07-12T18:30:53.187 に答える
0

Javaでは、インスタンス変数(つまり、クラス変数)はデフォルト値に初期化されます。 ただし、ローカル変数(つまりメソッド変数)は初期化せずに使用することはできません...

class static_example{
static int x;
public static void main(String args[])
{
System.out.println(x);
}

}

上記の例では、xはクラススコープで宣言されています...したがって、xはすでにデフォルト値0に初期化されているため、エラーは発生しません。

于 2012-07-12T18:31:24.060 に答える