2011-09-14 7 views
1

本の中でいくつかのJavaチュートリアルを通過して走った。Java - 変数定義後のブレース?私はこのようなコードを越え

private void theMethod(MyObject table) 
{ 
    SomeObject item1 = table.add(0,0,0,"Item 1"); 
    { 
    item1.setWhatever = false; 
    item1.setSomething = 15; 
    } 

    // More code here... 
} 

変数の定義次のブレースの目的は何ですか?

+0

私は書籍の正誤表(おそらく出版社のウェブサイト)をチェックします。おそらくそれはエラーであり、利用可能な更新されたサンプルがあります。 – scrappedcola

+0

私はそれが正誤であるとは思わない。このコードにはプログラミング目的はありませんが、それが正誤を意味するわけではありません。 – emory

答えて

6

多くのローカル変数を使用しているときにこの括弧をグループで使用することがあります。こうすることで、範囲外になり、同じ名前の変数を作成することができます。

私はすぐに良い例を見つけることができませんが、私はこのような何か意味:正常なのです

/* Code block 0 */ 
{ 
    int localStuff = 9; 
    boolean submit = false; 
    // Do some IO, or whatever 
} 
/* Code block 1 */ 
{ 
    int localStuff = 4; 
    boolean submit = false; 
    // Do some IO, or whatever 
} 

/* Code block 2 */ 
{ 
    int localStuff = -1; 
    boolean submit = true; 
    // Do some IO, or whatever 
} 
+0

+1は私にそれを打つ:P –

+2

のdupコードが見つかりました、あなたのローカルスコープをメソッドにラップするのはどうですか? :pとにかく、+1 –

+0

@AurélienRibon - いいです!まともなプログラマーになるために必要な才能は、パターンを見つけて一般化する能力です:-)悲しいことに、ほとんどのコードはこの例のように見える傾向があります... – KarlP

0

を、ブロックは単にコードを整理するために使用され、それが通常の流れ

として評価されます
class Foo{ 
    private void theMethod(String str) 
    { 
     { 
     System.out.println(str); 
     {}{}{}{}{}{}{}{} 
     } 
    } 

    public static void main(String ...args){ 

     new Foo().theMethod("my string"); 
    } 
} 

と同様の方法です。

class Foo{ 
    private void theMethod(String str) 
    { 
     { 
     System.out.println(str); 
     {;}{;}{;}{;}{;}{;}{;}{;} 
     } 
    } 

    public static void main(String ...args){ 

     new Foo().theMethod("my string");;;;;;;;;;;;;;;;; 
    } 


} 
+1

私は与えられた例を普通とは呼んでいません。これは本の実際のコードスニペットです。 – Robin

2

この特定の例では、コーディング担当者の趣味に基づいて、コードの外観を改善するだけのことは何もしません。しかし、それはところで、中括弧は範囲を制限するための参考にすることができ、また、タイプミス:)

次のようになります。

private void theMethod(MyObject table) 
{ 
    { 
    SomeObject item1 = table.add(0,0,0,"Item 1"); 
    item1.setWhatever = false; 
    item1.setSomething = 15; 
    } 
    // Item1 is not defined here anymore, so for example you can define another object with the name item1 
    // Though it's not a good practice. 
    OtherClass item1; 
    // More code here... 
} 
1

は、あなたはそれがそのようなものでしたか?コードブロックはそのように定義することはできますが、局所変数の範囲を限定することを除いてはあまり効果がありません。

しかし、クラスレベルの匿名コードブロックは、変数を初期化するのに有用であり、データ構造を移入など

例えば、この静的な匿名のブロックは、最終的な静的変数を初期化します。

public class Snippet { 

    private final static Map config; 
     static { 
      HashMap tmp = new HashMap(); 
      tmp.put("moo","foo"); 
      tmp.put("bar","baz"); 
      config = Collections.unmodifiableMap(tmp); 
      } 
    // rest of class here. 
    } 

それはあなたがすべてのコンストラクタとサブクラスが同じコードを実行していることを確認するにはあまり有用ではなく、便利である非静的ブロックとインスタンス変数についても同様、intを動作します。

このスレッドは重複していませんが関連しています。 Anonymous code blocks in Java

関連する問題