Java のエラーとは?コンパイルエラーと実行エラーの違い
新人
「Java のエラーって何ですか?プログラムを書いていると、赤い文字でエラーが出ることがあるんですが……」
先輩
「エラーとは、プログラムが正しく動かない原因となる問題のことだよ。Java では大きく分けて2種類のエラーがあるんだ。」
新人
「2種類のエラー?どんな違いがあるんですか?」
先輩
「コンパイルエラーと実行エラーという2つの種類があるよ。順番に説明していくね。」
1. Java のエラーとは?(基本的な説明)
Java のエラーとは、プログラムが正しく動かない原因となる問題のことです。エラーが発生すると、プログラムは正常に動作せず、修正しないと正しく動かせません。
Java のエラーは主に以下の2種類に分類されます。
- コンパイルエラー - プログラムを書くときの間違いによって発生するエラー
- 実行エラー - プログラムの実行中に発生するエラー
それぞれのエラーについて詳しく見ていきましょう。
2. コンパイルエラーとは?(発生する原因と例)
コンパイルエラーとは、プログラムを実行する前にチェックされるエラーのことです。Java はコードを実行する前に、正しい文法で書かれているかをチェックします。そのときに間違いがあると、コンパイルエラーが発生します。
コンパイルエラーが発生する主な原因
- 文法ミス(例: セミコロン
;を忘れる) - クラス名や変数名の間違い
- キーワードの間違い(例:
Publicと大文字で書く) - データ型の不一致(例: 文字列に数値を代入しようとする)
コンパイルエラーの例
例えば、次のコードはコンパイルエラーになります。
public class Sample {
public static void main(String[] args) {
System.out.println("こんにちは") // セミコロンを忘れている
}
}
このコードでは、System.out.println("こんにちは") の行の最後に ;(セミコロン)がありません。Java は 1 つの文の終わりを ; で区切るため、これがないとコンパイルエラーになります。
Sample.java:4: error: ';' expected
System.out.println("こんにちは")
^
1 error
このように、文法ミスがあるとコンパイルエラーが発生し、プログラムを実行することができません。
コンパイルエラーの修正方法
エラーが発生したら、エラーメッセージをよく読みましょう。エラーメッセージには、どの行で問題が起きているかが書かれています。上記のエラーでは error: ';' expected(セミコロンが必要です)と表示されているため、セミコロンを追加すれば修正できます。
public class Sample {
public static void main(String[] args) {
System.out.println("こんにちは"); // 修正:セミコロンを追加
}
}
コンパイルエラーはプログラムの間違いを事前に防ぐためのチェック機能なので、エラーメッセージをよく読んで修正することが大切です。
3. 実行エラーとは?(発生する原因と例)
実行エラーとは、プログラムの文法が正しくても、実行中に発生するエラーのことです。Java では、コードの書き方が正しくても、実行時に予期しない問題が発生することがあります。
実行エラーが発生する主な原因
- 0 での除算 - 数値を 0 で割ろうとするとエラーになる
- 配列の範囲外アクセス - 存在しないインデックスを指定するとエラーになる
- ヌルポインター例外 - null の値を持つオブジェクトにアクセスしようとすると発生する
実行エラーの例
例えば、次のコードは実行エラーになります。
public class RuntimeErrorExample {
public static void main(String[] args) {
int num = 10;
int result = num / 0; // 0 で割るのでエラー
System.out.println(result);
}
}
このコードでは、num / 0 の計算時にエラーが発生します。Java では 0 で割ることはできません。
Exception in thread "main" java.lang.ArithmeticException: / by zero
実行エラーの修正方法
実行エラーが発生した場合、エラーメッセージを確認して問題を特定し、適切に修正することが重要です。上記のエラーの場合、0 で割る処理を避ける必要があります。
public class RuntimeErrorExample {
public static void main(String[] args) {
int num = 10;
int divisor = 0;
if (divisor != 0) {
int result = num / divisor;
System.out.println(result);
} else {
System.out.println("0 で割ることはできません");
}
}
}
このように、0 での除算が発生しないように条件分岐を追加すると、実行エラーを防ぐことができます。
4. コンパイルエラーと実行エラーの違い(比較表)
コンパイルエラーと実行エラーの違いを分かりやすくまとめた表を見てみましょう。
| 種類 | 発生するタイミング | 主な原因 | 修正方法 |
|---|---|---|---|
| コンパイルエラー | プログラムを実行する前 | 文法ミス、データ型の不一致、キーワードの間違い | エラーメッセージを確認し、コードを修正する |
| 実行エラー | プログラムの実行中 | 0 での除算、配列の範囲外アクセス、ヌルポインター例外 | エラーメッセージを確認し、エラーが発生しないように条件分岐を追加する |
コンパイルエラーの例
例えば、次のコードはコンパイルエラーになります。
public class CompileErrorExample {
public static void main(String[] args) {
int number = "Hello"; // データ型の不一致
System.out.println(number);
}
}
このコードでは、整数型(int)の変数に文字列("Hello")を代入しようとしているため、コンパイルエラーになります。
CompileErrorExample.java:3: error: incompatible types: String cannot be converted to int
修正するには、適切なデータ型を使用する必要があります。
public class CompileErrorExample {
public static void main(String[] args) {
String text = "Hello"; // 修正: 文字列は String 型を使用
System.out.println(text);
}
}
実行エラーの例
一方、次のコードはコンパイルは成功しますが、実行時にエラーが発生します。
public class RuntimeErrorExample {
public static void main(String[] args) {
String text = null;
System.out.println(text.length()); // null のためエラー
}
}
このコードでは、text 変数が null の状態で length() メソッドを呼び出しているため、実行エラーが発生します。
Exception in thread "main" java.lang.NullPointerException
修正するには、変数が null でないことを確認してから処理を実行する必要があります。
public class RuntimeErrorExample {
public static void main(String[] args) {
String text = null;
if (text != null) {
System.out.println(text.length());
} else {
System.out.println("変数が null なので処理をスキップ");
}
}
}
このように、コンパイルエラーと実行エラーには、それぞれ異なる特徴があり、修正方法も違います。どのエラーなのかをしっかり見極めることが、エラーを解決する第一歩となります。
5. エラーを修正する方法(デバッグの基本)
Java のプログラムでエラーが発生したときは、適切に修正することが重要です。エラーを修正する作業を「デバッグ」と呼びます。ここでは、基本的なデバッグの方法を紹介します。
1. エラーメッセージを確認する
Java のエラーは、コンパイラや実行時のエラーメッセージとして表示されます。まずはエラーメッセージをよく読み、どこに問題があるのかを確認しましょう。
2. エラーの行番号を確認する
エラーメッセージには、エラーが発生したファイル名や行番号が記載されています。例えば、以下のようなエラーメッセージが表示された場合:
Sample.java:5: error: ';' expected
System.out.println("こんにちは")
^
この場合、Sample.java の 5 行目でセミコロンが足りないということが分かります。
3. プログラムを少しずつ確認する
エラーが複数発生している場合は、一度にすべて修正しようとせず、少しずつ修正しながら動作を確認するのがポイントです。
4. デバッグツールを活用する
Pleiades などの開発環境には、デバッグ機能が備わっています。ブレークポイントを設定し、変数の値を確認しながらエラーを修正することができます。
6. よくあるエラーと対処法(初心者が間違えやすいポイント)
初心者がよく遭遇するエラーと、その対処法を紹介します。
1. セミコロン(;)の付け忘れ
Java では、1 つの命令の終わりには ; を付ける必要があります。これを忘れるとコンパイルエラーになります。
public class Sample {
public static void main(String[] args) {
System.out.println("こんにちは") // セミコロンがないためエラー
}
}
対処法: セミコロンを忘れないようにする。
public class Sample {
public static void main(String[] args) {
System.out.println("こんにちは"); // 修正
}
}
2. 変数の型が合わない
Java では、変数に格納できるデータの種類が決まっています。型が合わないとコンパイルエラーになります。
public class Sample {
public static void main(String[] args) {
int number = "10"; // 文字列を整数に代入しようとしている
System.out.println(number);
}
}
対処法: 型を正しく指定する。
public class Sample {
public static void main(String[] args) {
String number = "10"; // 修正
System.out.println(number);
}
}
3. 配列の範囲外アクセス
配列の要素数を超えたインデックスを指定すると、実行エラーになります。
public class Sample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // 存在しないインデックスを指定
}
}
対処法: 配列の範囲を確認してからアクセスする。
public class Sample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
if (numbers.length > 3) {
System.out.println(numbers[3]);
} else {
System.out.println("配列の範囲外です");
}
}
}
7. Java のエラーを防ぐためのコーディングのコツ
エラーを未然に防ぐためには、いくつかのコーディングのコツを意識することが重要です。
1. コードのインデントを統一する
コードを見やすくするために、適切なインデントを付けることが重要です。インデントが整っていないと、エラーの原因を見つけにくくなります。
2. 変数の型を適切に指定する
型の不一致によるエラーを防ぐため、変数の型を適切に指定することが大切です。
3. 条件分岐を適切に使う
実行エラーを防ぐためには、条件分岐を適切に使い、エラーが発生しないようにすることが重要です。
public class SafetyCheck {
public static void main(String[] args) {
String text = null;
if (text != null) {
System.out.println(text.length());
} else {
System.out.println("変数が null なので処理をスキップ");
}
}
}
4. コメントをしっかり書く
コードの意図を明確にするために、コメントを活用しましょう。特に、複雑な処理を書く場合は、コメントを追加することでミスを減らすことができます。
5. 小さなプログラムで試しながら書く
いきなり大きなプログラムを書くのではなく、小さな単位でプログラムを作成し、動作を確認しながら進めることでエラーを減らせます。
6. 開発環境のデバッグ機能を活用する
Pleiades のデバッグ機能を使うと、エラーの原因を特定しやすくなります。ブレークポイントを設定して、変数の値を確認しながらデバッグを行いましょう。
これらのポイントを意識することで、Java のエラーを未然に防ぎ、効率よくプログラムを作成することができます。
Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。
スッキリわかるJava入門 第4版をAmazonで見る※ Amazonアソシエイト・プログラムを利用しています