ブロックとローカル変数の寿命
Java言語の制御構造とそのキーワードは、C 及び C++ とほとんど同じです。
プログラムは完全に構造化されています。
処理の単位は 《{》 と 《}》 で囲まれた、クラス定義、メソッド、ブロックです。
ブロックは何重にも階層構造を作ることができます。
ブロックは制御構造のキーワード for, while, do, if, else, switch 、
例外処理のキーワード try, catch と結びつきます。
これらのキーワードの後のブロックが単独の文もしくは
単独の他のブロックからなる場合は、
《{》 《}》 を省略することができます。
またキーワードなしで単にブロックを作ることもできます。
メソッドおよびブロック内で宣言されたローカルな変数は、
その内部のみでアクセスが可能です。
処理がメソッドおよびブロックから抜けると、
ローカル変数は消滅します。
したがってローカルな変数にアクセスモードや修飾子を指定しても
無意味です。
ブロックの外の変数とローカル変数の名前が衝突した場合は、
ローカル変数だと解釈されます。
繰り返しの処理
繰り返しの処理の対象となるブロックを作るキーワードは、 for, while, do の3つです。
for はそれに続く《(》 と 《)》 の中に 《;》 で区切られた3つの文を持ちます。
for( int i=0; i<100; i++ ) {
}
それぞれの意味は、初期化の処理、繰り返しを続けるかの判定条件、 繰り返しが行われたたびに行う処理です。 上の例のように、初期化の処理の中でブロック内で有効なローカル変数を 宣言することができます。
while はそれに続く《(》 と 《)》 の中に、 繰り返しを行うかどうかの判定条件を持ちます。
while( i<100 ) {
}
do の判定条件の文はその直後には来ません。 ブロックの後に置かれた while の文で条件を判定します。
do {
}
while( i<100 )
do で始まるブロックは、最低1回は必ず呼び出されます。
continue 文はブロック内の処理を強制的に中断し、
次の繰り返しの処理に移ることを意味します。
繰り返しのブロック自身から強制的に抜け出すには break 文を使います。
break によって処理は1つ外側のブロックに抜け出します。
多重のブロックを一度に抜け出すためには、
ブロックにラベル付けをし、そのラベル名を指定する break文を使います。
(Java言語に goto 文はありません。)
maketable: for( int i=0; i<100; i++ ) {
for( int j=0; j<100; j++ ) {
:
break maketable;
:
}
}
条件分岐
条件分岐を作るキーワードは if と switch です。
if は対応する else を持つことができます。else if をつなげることで、 複数の処理の分岐を行うことも可能です。
if( i<100 ){
}
if( i<100 ){
}
else {
}
if( i<100 ){
}
else if( i<50 ){
}
else{
}
switch は、その後の《(》 《)》 内の値によって複数の処理に分岐を行います。 switch のブロック内には case の後に指定された値ごとに処理を置く ことができます。 該当する値の処理が存在しない場合の処理は、default: の後に置きます。
switch( value ){
case 1: break
case 2: break
default: break
}
switch のブロックは単独のブロックです。
それぞれの分岐した処理を終えるには break 文でブロックから抜け出す必要が
あります。
break 文は if のブロックは対象としません。
その外側のブロックに対しての break と解釈されます。
(そうしないと break するかどうかの条件判定ができなくなってしまうからです。)
if と switch の他に、記号≪ ? ≫による条件判定も使用できます。 使い方は C と同じです。≪ ? ≫の前にある boolean型の値を判定条件とし、 true ならば≪ ? ≫直後の命令を、false ならば≪ : ≫で区切られた 後の命令を実行します。
( i > 0 ) ? j = i : j = (-i);