2016-11-04 6 views
-2

私は約static initialization blocksdouble brace initializationを知っています。 しかし、メソッドの余分な中カッコはどうでしょうか?メソッド内の余分な中カッコは使用していますか?

public static void main (String [] args) { 
String hello = "Hello"; 
    { 
     System.out.print(hello); 
     {{{{{ 
      System.out.println(" world!"); 
     }}}}} 
    } 
} 

、なぜこの作業を行います。
コンパイラは、次のコードのいずれかの例外をスローしないのですか? java.lang.Errorを投げるべきではありませんか?

+0

Q:* "なぜこれが機能するのですか?" * - 'それは合法です...醜いですが... Java。 Q:* "java.lang.Errorを投げてはいけませんか?" * 1)それは合法Javaです。 2)コンパイルエラーは例外をスローしません。 (Duh!) –

答えて

2

追加のブレースの唯一の目的は、スコープ制限を提供することです。 Listのコピーは、それらのカッコ内にのみ存在し、スコープの外側には存在しません。

このコードが生成された場合、コードジェネレータはこれを実行して、リストコピーが挿入された回数を心配することなく、おそらく心配することなく、(このような)いくつかのコードを挿入できると仮定しますこのスニペットが同じメソッドに複数回挿入された場合は、変数の名前を変更します。

時には、コードのセクションを折りたたみ、自動的に中かっこを折りたたむエディタを持つ人々のコードにそのような構造が表示されることがあります。彼らは通常、折りたたまれている関数、クラス、ループなどに該当しない論理的なセクションでコードを折り畳むためにこれを使用します。

3

中括弧はJavaで可変スコープを定義しているため、基本的に複数の同等のスコープを定義していますが、これは有効です。

+0

"[...]あなたは基本的に複数の等価範囲を定義しています" - これは正しくありません。スコープは同一ではありません(ただし、変数を定義していないため意味がありません)。ただし、Javaでは、内部スコープ内の既存の変数を上書きすることはできません。 C/C++ではこれが可能です。 – Turing85

+0

私は機能的な意味で同等であることを意味しました。つまり、スコープには同じ変数セットが含まれています。今はっきりしていることを願っています。 –