2011-07-12 14 views
2

私は静的初期化ブロックを持っています。これは、ファイルへのロギングを設定します。何かがうまくいかない場合、私は静的ブロックから脱出したいだけです。これは可能ですか?私はif/elseアプローチを使用することができますが、シンプルなブレークを使用すると、コードがはるかに読みやすくなります。Javaの静的初期化ブロックからの切断

+0

これはあなたのクラスを一貫性のない/使用不可能な状態にしますか? –

+0

はい、そうです。ロギングクラスです。したがって、これが失敗すると、ログ出力をコンソールに書き込むことができますが、ファイルへのロギングは使用できなくなります。 – user489041

+1

私は、あなたのクラスが使用不可能な状態にあった場合、クラスローダー(またはそれらの行に沿ったもの)によってロード可能でない可能性があり、あらゆる種類の問題を引き起こしていました。 *すべての 'static final'変数は、関係なく初期化されるべきであることを覚えておいてください。 –

答えて

3

はおそらく、すべての例外をキャッチしたい:

static { 
    try { 
     // Initialization 
    } 
    catch (Exception exception) { 
     // Not much can be done here 
    } 
} 

しかし、注意してください:クラスをロードすることは失敗することはありませんが、いくつかまたは全ての静的フィールドが矛盾した状態にある可能性があります。

0

try/catchはどうですか?

try{}catch(){} 
1

これはお探しのものですか?

label: 
{ 
    // blah blah 
    break label; 
} 
+0

break文の下にあるラベルに壊れますか? – user489041

+0

どういう意味ですか? –

+0

ラベルはブロックの先頭になければなりません。ブロックする場所はブロックの最後です。 –

0
  • それは例外である場合、試み使用{(新しい例外をスローする);}キャッチ
  • それが通常の処理であれば、IF-THEN-ELSE又はスイッチを使用
    最終的にあなたがラベルを使用することができますが、私見それは非常に悪いスタイルです:

    //boolean condition; 
    static { 
    label: 
    { 
        System.out.println("1"); 
        if(condition) break label; 
        System.out.println("2"); 
    } 
    } 
    
+0

HTMLコードタグは使用しないでください。あなたのコードをインデントするだけで(リスト内の4つのスペースまたは8)、コードはうまく表示されます。 –

4

あなたの静的ブロックはメソッドに私の意見では

static { init(); } 

private static void init() { 
    // do something 
    if(test) return; 
    // do something 
} 
0

を呼び出すことができ、静的ブロックは、使用するフロー制御戦略の面で他のブロックとは異なるではありません。 BREAKは、(静的ブロックでも)読みやすいと思われる場所であればどこでも使用できますが、実際にはコードの読みやすさが低下し、IF ELSEアプローチが優れているという一般的な前提があります。

関連する問題