12

静的変数は、プライベート静的メソッドまたは静的ブロックで初期化できます。両者の間に微妙な違いはありますか?静的メンバーの初期化に静的メソッドを使用できない状況はありますか? 後者の方が読みやすいことがわかりました。

静的ブロックの初期化:

private static int NUM_ITER;
static {
    // Operations
    NUM_ITER = //val from above operations.
}

プライベート静的メソッドの初期化:

private static int NUM_ITER = calculateNumIter();

// Some method comment on how we are calculating.
private static int calculateNumIter()
{
    // Operations.
    return //value_from_operations.
}

読みやすいので、私は2番目のものを好みます。最初 (静的ブロック) のみを使用する必要がある状況はありますか?

静的メンバー (最終および変数) を初期化するための最適なコーディング規則/設計は何ですか? このスレッドからでも、プライベートな静的メソッドが静的ブロックよりも優れていることを知りました。

ありがとう、

4

3 に答える 3

3

2 つの異なる変数が相互に依存しており、個別に初期化できない場合、静的ブロックが必要 (または少なくとも有用) になります。

たとえば、ファイルから 2 つの値を読み取る必要があるとします。両方の値を追加のオブジェクトに格納できます。しかし、本当に 2 つの定数が必要な場合は、静的ブロックが便利です。

于 2012-07-23T18:50:42.247 に答える
2

コードをクリーンで読みやすいものに保つ構文を使用することをお勧めします。

  • 初期化が 1 行、最大 2 行の非常に単純なコード行になる場合は、静的ブロックを使用します。

  • 初期化が複雑な操作である場合は、適切な名前のメソッドが最適です。

  • 疑わしい場合は、メソッド構文を使用し、メソッド名を使用して、どの変数だけでなく、どのように初期化するか (つまり、 initializeValueWithRandomNumber() ) も宣言します。

于 2012-07-23T19:04:27.773 に答える
1
  1. static Initializerblock (あなたの 1 つのオプション) は、変数が初期化される前であっても、JVM がクラスをロードするときに実行されます。static

  2. 一度にすべての静的変数を持つのに適した場所です。

  3. 2 番目のオプションは、複数の引数を初期化メソッドのパラメーターに渡すことで、複数の変数を初期化するためにオプションで使用できます。 static

于 2012-07-23T18:56:39.403 に答える