2012-04-17 11 views
3

静的な初期化子がこのスレッドから実行されたとき、何のトレッドを読みましたか。 Static initializer in Java。しかし、私は誰か他の人が書いた古いコードを実行しているので、なぜ彼がそれを使ったのかを理解できないように思えます。私のクラスはJavaの静的初期化子が冗長であるようです

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

    private static Config config; 

    static { 
    config = null; 
    } 

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

なぜ彼はこれをしませんでしたか?私はクラスがredeneredされていると私は、静的initalizerを使用しない場合、インスタンス変数はinitalizer得る一方で、それは、設定=> nullを設定しますので、静的initalizerは、右のコンストラクタの前に、右後、コールを取得することを理解し

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

    private static Config config = null; 

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

スーパー。 2人のクラスが同じことをしているのではないでしょうか?

答えて

5

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

+0

したがって、私は2番目の実装を使用することはできますし、機能を変更することはできません。 – Churk

+0

おそらく、クラスの作成者はもっと複雑な初期化を行い、その後静的初期化子を削除せずにそれを削除しました。しかしそれはちょうど推測です。とにかく、あなたの答えは正確で正確です(+1)。 –

+0

@Churkこの特定のケースでは?はい。 –

3

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

1

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

0

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

どちらの解決方法でも、それは単なる技術的なものであり、私は人々が両方を使用するのを見ました。

0

どちらもまったく同じことを行っています。設計上の問題です。

関連する問題