3

重複の可能性:
静的初期化ブロック

古いコードを見直しているときに、これまでに見たことのない奇妙な構文を見つけました。いくつかの調査を行った後、私が見たのはstatic{}(正しく理解していれば)初期化時に実行されるコードのブロックであることがわかりました。

私が理解していないのは、そのような機能を持つことの利点、またはいつこれを使用したいのかということです。静的ブロックには、通常の静的メソッドに属する可能性のある通常のコード行が含まれているように見えますが、初期化時に自動的に実行する利点は何ですか (プログラマーがメソッドを呼び出すコード行を節約する以外に)? なぜこれが重要または有用なのですか?

4

4 に答える 4

4

彼らがJavaチュートリアルで言うように:

初期化に何らかのロジックが必要な場合 (たとえば、エラー処理や複雑な配列を埋めるための for ループ)、単純な代入は不十分です。インスタンス変数はコンストラクターで初期化でき、エラー処理やその他のロジックを使用できます。クラス変数に同じ機能を提供するために、Java プログラミング言語には静的初期化ブロックが含まれています。

于 2012-09-07T11:38:24.643 に答える
2

静的変数のコンストラクターと考えてください。誰かが使用する前に初期化する機会を与えてくれます。

于 2012-09-07T11:36:13.697 に答える
2

あなたが言ったように、静的ブロックは初期化時に実行されます。たとえば、かなり複雑な静的フィールドがあるとします。

private static List<ThingsDownloadedByTheNet> ls;

ただやっている

private static List<ThingsDownloadedByTheNet> ls = new ArrayList<ThingsDownloadedByTheNet>

リスト要素も設定したいかもしれないので、それだけでは十分ではありません。したがって、いくつかの初期化を実行する静的ブロックを実行します (この場合、サーバーに接続してリスト要素を入力します)。

于 2012-09-07T11:39:39.040 に答える
0

static{}ブロックは、クラスがロードされたときに実行されます。これを使用して、静的フィールドを初期化したり、静的メソッドを呼び出したりできます。クラスには「コンストラクターがない」ため、この動作を置き換えるためにメソッドを使用することはできません。実際、これは「クラス コンストラクター」と見なすことができます。

于 2012-09-07T11:36:40.627 に答える