if-then文
基本形
if-then文は以下のようにifキーワード、(boolean式)、1つの文が並べられた文で、boolean式がtrueの場合に文が実行される。
if (boolean式) 文;
| 1 2 3 4 5 | int r = new java.util.Random().nextInt(); if (r % 2 == 0) System.out.println(r + " is even"); // 2145498072 is even | 
キーワードから見るとif文となるが、Oracleの仕様書を尊重してif-then文としておく。
改行した場合
実行文の前で改行しても同じように実行される。
| 1 2 3 4 5 6 | int r = new java.util.Random().nextInt(); if (r % 2 == 0)   System.out.println(r + " is even"); // 1063598367 is odd | 
エラープローン
if-then文で改行して複数の文を書いた場合、条件式直後の1文しか条件の判定結果に含まれない。以下の例ではfalseで1つ目の分は無視されるが、その直後の文に制御が移って実行される(インデントは効果がない)。
| 1 2 3 4 5 | if (false)   System.out.println("1st line");   System.out.println("2nd line"); // 2nd line | 
当初簡易化のために改行形で書いていて、後から条件の対象となる文をそのまま付け加えた時、意図したロジックと異なる動作をしてしまう可能性がある。
一般形
上のようなトラブルを回避するため、一般にはif命令の後の文を{}で囲んでブロックとする。
if (...) { ..... }
| 1 2 3 4 5 6 7 | int r = new java.util.Random().nextInt(); if (r % 2 == 0) {   System.out.println(r + " is even"); } // 590678292 is even | 
if-then-else文
基本形
if-then-else文は以下のようにifキーワード、(boolean式)、文1、elseキーワード、文2が並べられた文で、boolean式がtrueの場合に文1が、falseの場合には文2が実行される。
if (boolean式) 文1 else 文2;
| 1 2 3 4 5 | int r = new java.util.Random().nextInt(); if (r % 2 == 0) System.out.println(r1 + " is even"); else System.out.println(r1 + " is odd"); // 40803669 is odd | 
改行した場合
文1の前、elseの前、文2の前で改行しても、文2の終わりまでが1つのif-then-else文として扱われる。
| 1 2 3 4 5 6 7 8 | int r = new java.util.Random().nextInt(); if (r % 2 == 0)   System.out.println(r + " is even"); else   System.out.println(r + " is odd"); // 254298844 is even | 
エラー
以下のコードはコンパイルエラーになる。
| 1 2 3 4 5 | if (false)   System.out.println("1st line");   System.out.println("2nd line"); else   System.out.println("3rd line"); | 
これは、以下の理由による
- if-then文に属するのは"1st line"の文だけ
- その後、if-then文の外側として"2nd line"の文が実行される
- これに続くelseには、それが属するべきif文がなく、if-else文ではないのにelse単独で存在
- よって構文エラー
一般形
上記のようなエラーを避け、またif文であったようなトラブルを避けるためにも、if-else文においても{}によるブロック表記が一般的。
if (...) { ..... } else { ..... }
| 1 2 3 4 5 6 7 8 9 | int r = new java.util.Random().nextInt(); if (r % 2 == 0) {   System.out.println(r + " is even"); } else {   System.out.println(r + " is odd"); } // 1529328115 is odd | 
else if
Javaの仕様上、Pythonのelif、Rubyのelsif、PHPのelseifに相当するキーワードはない。
これらと同等のロジックを組むために一般的には”else if“という表現がされているが、これを適切に扱うにはブロックとして扱うべきである。これについて”Java仕様における”Java – if文をブロック化すべき理由とelse if“に示した。