3

だから私はこのスレッドから静的イニシャライザーがいつ何を実行するかについてのトレッドを読みました。Javaの静的初期化子。しかし、私は他の誰かによって書かれた古いコードに遭遇していて、なぜ彼がそれを彼のように使用するのか理解できないようです。

私のクラス:

public class ClassA extends Thread {
  .... private vars ....

  private static Config config;

  static {
    config = null;
  }

  public ClassA(Config config) {
    ClassA.config = config;
  }
}

なぜ彼はこれをしなかったのですか?

public class ClassA extends Thread {
  .... private vars ....

  private static Config config = null;

  public ClassA(Config config) {
    ClassA.config = config;
  }
}

静的イニシャライザーは、再生成されるクラスとして呼び出されることを理解しているため、config => nullに設定されますが、静的イニシャライザーを使用しない場合、インスタンス変数はコンストラクターの直前とスーパーの直後にイニシャライザーを取得します。では、2つのクラスは同じことをしているのではないでしょうか。

4

5 に答える 5

5

これらのクラス同じことを実行しますが、より複雑な静的初期化子を常に1行で実行できるとは限りません。

于 2012-04-17T15:16:50.790 に答える
3

最初の例の静的初期化子は、そのクラスの動作に影響を与えません。あなたはそれを完全に取り除くことができ、何も変わらないでしょう。

于 2012-04-17T15:17:28.143 に答える
1

x = x + 1なぜ私は代わりに書いたのx++ですか?特別な理由はありません、私はそれをそのようにしただけです。2つは基本的に同じであり、実際には問題ではないため、ここでも同じだと思います。一方、将来、より複雑な初期化が必要な場合は、その1行のコードではそれを実行できない可能性があります。

于 2012-04-17T15:17:34.510 に答える
0

静的ブロックは、ClassAのインスタンスがいくつあっても、クラスがロードされるときに1回だけ構成を初期化します。

どちらの解決策でも構いません。それは単なる技術であり、人々が両方を使用しているのを見てきました。

于 2012-04-17T15:17:36.243 に答える
0

どちらもまったく同じことをしています。それは設計上の選択の問題です。

于 2012-04-17T15:19:18.407 に答える