Javaのfinal変数と到達不能ステートメント|コンパイルエラーが発生する理由を解説
到達不能ステートメント(Unreachable Statement)とは?
到達不能ステートメントとは、プログラムの実行時に一切実行されない文のことを指します。Javaでは、到達不能なコードが検出されるとコンパイルエラーとなります。文が到達不能になる主な原因は以下の3つです。
- return文が先行している場合:メソッドがすでに値を返して終了しているため、後続のコードは実行されません。
- 無限ループが存在する場合:ループから抜け出せないため、その後のコードに制御が移りません。
- 処理が強制終了される場合:コードが実行される前にプログラムが終了させられます。
本記事では、finalキーワードを使った変数が原因で、どのように到達不能ステートメントが発生するのかを具体例とともに解説します。
サンプルコード
class Demo_example{
final int a = 56, b = 99;
void func_sample(){
while (a < b){
System.out.println("最初の値は2番目の値より小さいです");
}
System.out.println("これは到達不能ステートメントです");
}
}
public class Demo{
public static void main(String args[]){
Demo_example my_instance = new Demo_example();
my_instance.func_sample();
}
}
出力結果
/Demo.java:11: error: unreachable statement
System.out.println("これは到達不能ステートメントです");
^
1 error
コードの解説
クラス「Demo_example」には、final修飾子が付いた2つのint型変数「a」と「b」が宣言されています。final変数は初期化後に値を変更できないため、事実上の定数として扱われます。
メソッド「func_sample」の中では、while文によって条件「a < b」が評価されます。ここで重要なのは、aとbがfinal変数であるという点です。コンパイラは「a = 56」「b = 99」という値が決して変わらないことを把握できるため、条件式「a < b」が常にtrueになると判断します。
その結果、このwhileループは永久に終わらない無限ループとして認識され、ループの直後に記述されたSystem.out.println文には決して処理が到達しない、つまり「到達不能」であるとコンパイラが判定し、コンパイルエラーが出力されます。
もう一方のクラス「Demo」にはmainメソッドが定義されており、その中でDemo_exampleクラスのインスタンスを生成し、「func_sample」メソッドを呼び出しています。ただし、上述のコンパイルエラーが発生するため、このプログラムは実行まで至りません。
ポイントまとめ
- final変数は定数として扱われるため、コンパイラがループの条件式の結果を事前に確定できる
- 常にtrueになるwhileループの後ろにあるコードは、到達不能とみなされる
- Javaでは到達不能なコードが1行でも含まれているとコンパイルエラーになる
- エラーを回避するには、final変数を通常の変数に変更するか、ループに適切な終了条件を持たせる必要がある
-
Javaでパッケージを使うメリットとは?主な利点をわかりやすく解説
Javaのパッケージ(package)は、関連するクラスやインターフェースなどをひとまとめにして管理するための仕組みです。パッケージを適切に活用することで、コードの保守性や可読性が大きく向上します。 Javaでパッケージを使用する主な利点 独自パッケージの定義が可能:プログラマーは自分専用のパッケージを定義し、複数のクラスやインターフェースを論理的にグループ化できます。 関連クラスの整理がしやすい:自分が実装した関連性のあるクラスを同じパッケージにまとめておくのは良いプラクティスです。これにより、他の開発者もそのパッケージに含まれるクラス、インターフェース、列挙型、アノテーションの関係性を容
-
Bashの変数の基本:設定・削除・子プロセスへの渡し方を実例付きで解説
コンピュータサイエンス(そして日常的なコンピューティング)において、変数とは、後で使う情報を一時的に保持しておくメモリ上の場所のことです。言い換えれば、データを入れたり取り出したりするための一時的な保管容器です。Bashシェルでは、そのデータは単語(コンピュータ用語では「文字列」)でも数値(「整数」)でも構いません。 パソコンで意識的に変数を使ったことがない人でも、生活の中では変数に相当するものを使っているはずです。「あれを取って」「これを見て」といった言葉は、文法上の変数(代名詞)です。「これ」や「あれ」が何を指すのかは、話し手が頭の中で思い浮かべているものや指差している対象によって決まりま