2012-03-30 8 views

答えて

8

一般に、プログラマは静的ブロック内の変数を宣言する必要はありません。通常、静的変数のスコープに応じて、すべてのクラスインスタンスが使用する静的変数の初期化を保証するためです。

静的ブロック内で宣言された変数は、メソッドおよびコンストラクタ変数と同様に、そのブロックに対してローカルになります。

JDK Docs

+0

"一般的に、プログラマは静的ブロック内に変数を宣言する必要はありません" >>なぜそうではありませんか?データを保持するために一時オブジェクトが必要な場合は、静的ブロックに変数があります。 算術演算を行った後に静的フィールドをインスタンス化し、コードを読み取り可能にしたい場合のシナリオを考えてみましょう。 'static float radius; スタティックフロート領域。 static { final float PI = 3.14f; エリア=(float)(PI * Math.pow(radius、2)); } ' – realPK

10

ブロック内で宣言された変数は、そのブロック内でのみアクセスできます。静的またはいいえ。

静的メソッド内で宣言された変数は静的です。彼らは他の静的変数またはグローバル変数にしかアクセスできません。

+0

しかし、C/C++のローカル変数とは異なり、これらの変数は本当に正しい、ブロックを実行した後、 『スコープの外に出る』ではないのですか? –

+2

ブロック内の変数の範囲はブロックです。実行後、これらの変数にアクセスする方法はありません。これは変数が範囲外になることを意味します。スタティックブロックは1回だけ実行されるため、再入力する方法はありません。通常、静的ブロックを使用して、クラスがロードされたとき、およびコンストラクタが実行される前に、クラスの静的フィールドを初期化します。静的フィールドには、public、package protected、protected、privateの3つのフィールドがあります。 –

4

これらはメソッド変数に似ています。ブロックスコープでのみアクセス可能です。

0

いいえ、ブロックの外側には表示されません。それらはローカル変数のように振る舞います。静的ブロックはクラスの初期化時に呼び出される無名関数と考えることができます。彼らは静的なメンバーではありません。

関連する問題