2017-04-14 13 views
3

Javaはブラケットのみを受け入れるのはなぜですかメソッドですか?何のために作られていますか?中括弧のみのメソッド

{ 
    // Do something 
} 

私もそれがstatic-block後で、コンストラクタの前に自動的に実行されていることに気づきました。 スーパークラスのコンストラクタは前に実行されますが、

この注文には具体的な理由はありますか?

これは私が実行順序発見のために作られたJUnitです:ちょうどそれは、静的ブロックと同じである

super class static 
static 
super class brackets 
super class constructor 
brackets 
constructor 
test 
+0

* "この注文には特別な理由はありますか?" - JLS 15.9.4 - http://docs.oracle.com/javase/specs/jls/se8/html/jls-15で説明されています。 html#jls-15.9.4 –

答えて

2

しかし:私が手出力として

public class TestClass extends TestSuperClass { 

    public TestClass() { 
     System.out.println("constructor"); 
    } 

    @Test 
    public void test() { 
     System.out.println("test"); 
    } 

    { 
     System.out.println("brackets"); 
    } 

    static { 
     System.out.println("static"); 
    } 
} 

public class TestSuperClass { 

    public TestSuperClass() { 
     System.out.println("super class constructor"); 
    } 

    { 
     System.out.println("super class brackets"); 
    } 

    static { 
     System.out.println("super class static"); 
    } 
} 

を静的ではありません。したがって、スーパーコンストラクタの後でコンストラクタの前に、すでに見つかった順序で実行されます。しかし、もし静的ブロックが有用であるならば、規則的なブロックはそれほど多くはありません。それは決して使用されませんが、合法です。私はそれが使用されたことを見たことがなく、特定の目的を考えることはできませんが、有効な構文の一部です。もしそうでなければ、静的ブロックはどちらにもなりません。

+0

私は実際にそれが一度使用されたのを見ました.UIコンポーネントを作成する非常に長いメソッドでは、ローカル変数の範囲を制限するために使用されました。これは、別の方法でコードを抽出する方法を半分焼いたものです。悪い練習IMO。 –

+0

確かに、私はJeremy、IMHOでも悪い練習に同意します。ちょうどそれが使用されていないことと、それがいつであるかという私の主張を証明します。 –