制御構造

ブロックとローカル変数の寿命

 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);