たとえば、次のようなコードを書きます:
int i; { int j=1; i=j; }
このコードがクラス定義領域に存在する場合、それがクラス属性の内容を初期化するために使用される通常のステートメント ブロックであることがわかり、呼び出されます。クラスがインスタンス化されると、内部でいくつかのメソッドを実行できます。
多くの場合、これはシングルトン モードやその他のモードで使用され、複雑なクラスのコンテンツを初期化するために静的メソッドを追加します。これにより、読み込みシーケンスによって発生する一部の実行時例外を回避できます。
しかし、このコードがメソッド内にある場合はどうなるでしょうか?
基本的には全く意味がありません。以前の考えでは、これは単にコードを囲むための形式であり、それ以外の何ものでもありませんでした。
今日は「ステートメントタグ」に関連するコードを書きました:
label17: int i; int j; ThreadGroup[] arrayOfThreadGroup; if (flag) break label17; return 0;
例外「トークン「:」の構文エラー、{このトークンの後に期待されます」が「:」の位置で発生しました。
つまり、コードが 1 行に存在できない場合 (int i はメソッド本体内に明確なインスタンス化代入位置が必要です)、label17 をステートメント ブロックでマークする必要があります。
正しい形式は次のとおりです:
label17: { int i; int j; ThreadGroup[] arrayOfThreadGroup; if (flag) break label17; return 0; } 或者: label17: int i; int j; ThreadGroup[] arrayOfThreadGroup; if (flag){ break label17; return 0;}
間違った使用方法を見てみましょう:
label13: int x = 0;
明らかに、ラベルの後にはデフォルトの単一行のステートメント ブロックがあり、この x は今後どこでも使用できなくなります。プロンプトは次のとおりです:
この行に複数のマーカーがあります
- x を変数に解決できません
- トークン "int" の構文エラー、このトークンを削除します
正しい形式は 2 つあります:
int x = 0; label13: x = 0; 或者 label13:{ int x = 0;}
以前の誤解、for(){}、if(){} およびその他の使用法では、論理 if() とステートメント ブロック {} は 2 つの独立した構文である必要があります。
JAVA ステートメント タグのより合法的な使用法と {} ステートメント ブロックの使用法については、PHP 中国語 Web サイトの関連記事に注目してください。