2013-06-13 1 views
9

後、所定のサンプルは、次の通りである:は} {使用してアクションバーについて本で与えAndroidのコードの例では、セミコロン

可能セミコロンの後に中括弧を使用してどのように
MenuItem menu1 = menu.add(0, 0, 0, "Item 1"); 
{ 
    menu1.setIcon(R.drawable.ic_launcher); 
    menu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
} 

?私がここで理解していない概念がはっきりしています。

+3

私が知っている限り、{}を残した場合と同じです。 menu.addは1つのコマンド、menu.setIconは次のmenu.setShowAsActionです。中括弧を使用してコードブロックを宣言することができます。 – damian

+0

匿名コードブロックであることが分かっている場合は、その複製*のみ* – Raedwald

答えて

17

これらは完全にオプションであり、副作用はまったくありません。あなたの例では、コントロールに属しているプロパティの割り当てを意図してコードを読みやすくする目的で使用されています。あなたは括弧なしでもそれを行うことができます。しかし、ツールを使用してコードを再フォーマットすると、インデントが消えてしまう可能性があります。

あなたがメソッドを持っていて、そこに{}置く場合は、新しい変数のスコープを作成することができます

void someMethod() { 
    { 
     int x = 1; 
    } 
    // no x defined here 
    { 
     // no x here, so we may define a new one 
     string x = "Hello"; 
    } 
} 

をあなたはどこでもあなたが文を開始することができます方法で新しいスコープを開始することができます(変数宣言、メソッド呼び出し、ループなど)

注:if文の場合は、その中括弧で新しい変数スコープも作成します。

void someMethod() { 
    if (someThing) { 
     int x = 1; 
    } 
    // no x defined here 
    if (somethingElse) { 
     // no x here, so we may define a new one 
     string x = "Hello"; 
    } 
} 

try、catchなどについても同じことが言えます。それについて考えると、メソッド本体の中括弧もそのように動作します:クラススコープの上に「レイヤー」という新しいスコープを作成します。

+1

明確な説明。ありがとうございました。 –

+0

よろしくお願いします! – Mene

15

これは匿名コードブロックと呼ばれ、restrict the variable scopeとなっています。

0

これらは、初期化ブロックです。

これは、初期化ブロックの正しい使い方ではないと思います。 作成した例は別として、これらのブロックは初期化の目的で使用されています。詳細表示の場合はClick Hereです。

+1

彼らはイニシャライザになることができますが、メソッド内の単純なブロックステートメントであってもかまいません。私たちは文脈を見ずにはわかりません。 –

+0

確かに、使用は完全に開発者に依存しています – R9J

関連する問題