last-modified: Dec./26th/2001
Java では "{" から "}" までのことをブロックと呼びます。構文上、ひとまとまりの制御単位を表します。いままでに if, switch, while, for ブロックを紹介してきました。本節では、これらのブロック内部から、途中で脱出する方法を紹介します。
continue / break / returncontinue は当該ブロックの先頭へ制御を戻し、 break は当該ブロックから脱出します。繰り返しループ内部で利用すると、 continue はループを続けますが、 break はループを止めます。
break と似た動作をするものとして、 return があります。これは当該メソッドの実行を終了し、元の実行プロセスに制御を戻します。あるメソッドから別のメソッドが呼ばれたとき、呼ばれたメソッド内で return に出会うと、制御は呼んだメソッドに戻ります。
簡単なサンプルで動作を確認しましょう。
continueTestContinue.java:
class TestContinue{
public static void main(String arg[]){
for(int i=0;i<=5; i++){
System.out.print(i+" Block Start...");
if(i==Integer.parseInt(arg[0])){
System.out.println("");
continue;
}
System.out.println(i+" Block END...");
}
System.out.println("Program END...");
}
}
for ループの中に if 文が入っています。 Integer.parseInt() は Integer クラスのメソッドで、引数の文字列を整数に解釈します。従って、 if 条件文は、「コマンドライン引数とループ・カウンタが同じ値になる」と解釈できます。
C:\Java>javac TestContinue.java C:\Java>java TestContinue 3 0 Block Start...0 Block END... 1 Block Start...1 Block END... 2 Block Start...2 Block END... 3 Block Start... 4 Block Start...4 Block END... 5 Block Start...5 Block END... Program END...
continue; はブロック内で後続の処理を省略して、ブロックの頭に制御を戻します。
break次は break; のサンプルです。上に挙げたサンプルの continue; を break; に書き換えただけです。
TestBreak.java:
class TestBreak{
public static void main(String arg[]){
for(int i=0;i<=5; i++){
System.out.print(i+" Block Start...");
if(i==Integer.parseInt(arg[0])){
System.out.println("");
break;
}
System.out.println(i+" Block END...");
}
System.out.println("Program END...");
}
}
C:\Java>javac TestBreak.java C:\Java>java TestBreak 3 0 Block Start...0 Block END... 1 Block Start...1 Block END... 2 Block Start...2 Block END... 3 Block Start... Program END...
break; はブロック内で後続の処理を省略して、ブロックから脱出します。従って、上の例では繰り返しが終了しています。
次は入れ子にされた多重ブロックからの脱出について説明します。