last-modified: Dec./26th/2001
Java では "{
" から "}
" までのことをブロックと呼びます。構文上、ひとまとまりの制御単位を表します。いままでに if
, switch
, while
, for
ブロックを紹介してきました。本節では、これらのブロック内部から、途中で脱出する方法を紹介します。
continue
/ break
/ return
continue
は当該ブロックの先頭へ制御を戻し、 break
は当該ブロックから脱出します。繰り返しループ内部で利用すると、 continue
はループを続けますが、 break
はループを止めます。
break
と似た動作をするものとして、 return
があります。これは当該メソッドの実行を終了し、元の実行プロセスに制御を戻します。あるメソッドから別のメソッドが呼ばれたとき、呼ばれたメソッド内で return
に出会うと、制御は呼んだメソッドに戻ります。
簡単なサンプルで動作を確認しましょう。
continue
TestContinue.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;
はブロック内で後続の処理を省略して、ブロックから脱出します。従って、上の例では繰り返しが終了しています。
次は入れ子にされた多重ブロックからの脱出について説明します。