> 要は、このwhileを抜けるのは、どういった処理が実行されたらなのかな??
・「処理」の中でbreak文が実行された(更なるループ内かswitch文の中にないこと)
・「処理」の中でreturn文が実行された(この場合この文があるメソッドから抜ける)
・「処理」の中あるいはそれから呼び出されるメソッドから例外が投げられた(この場合投げられた例外をキャッチできるところまで戻る。どこでもキャッチできなかった場合はプログラム終了)
たぶんあなたは「こんないつまでも終わらないループにどんな意味があるのか」と思われて質問されたと思います。
確かにこれ(無限ループ)はそれを抜け出す手段をループ内に設けない限り意味がありません(というか、普通は作ってはいけない)。
しかし、実はわざと作られた無限ループは結構利用されているテクニックです。
たとえば、AWTやSwingなどのGUIプログラミングで何らかのイベント部分のみを書くだけでウィンドゥが書かれたとおりの動作を行いますが、あれはAWTやSwingなどの内部で以下のような処理を行っているからです。
(あくまでも疑似コードで、詳細は異なるかもしれませんが)
while(true){
if(OSからのイベントが1件以上あるか?){
OSからのイベントを1件受け取り;
受け取ったイベントから処理を行うメソッドを決定し、パラメータを作成;
メソッド実行; // GUIフレームワーク既定のメソッドかもしれないし、プログラマーが記述したイベントハンドラかもしれない
if(メソッド実行結果が「プログラム終了」?)
break;
}
}
上記以外にも、何かを待つ処理の場合は、無限ループ内でその何かが起きたかどうかかを判定し、何かが起きたらbreakする、というのが定番処理になっています。
お礼
いやー、、、そんな使い方もあるんですね。。。 GUIはまったく勉強してないので、未知の領域です。。。 ご丁寧な回答ありがとうございます。