カテゴリ: Javaの基本 更新日: 2025/03/21

Java のエラーとは?コンパイルエラーと実行エラーの違い

062
Java のエラーとは?コンパイルエラーと実行エラーの違い

新人と先輩の会話形式で理解しよう

新人

「Java のエラーって何ですか?プログラムを書いていると、赤い文字でエラーが出ることがあるんですが……」

先輩

「エラーとは、プログラムが正しく動かない原因となる問題のことだよ。Java では大きく分けて2種類のエラーがあるんだ。」

新人

「2種類のエラー?どんな違いがあるんですか?」

先輩

「コンパイルエラーと実行エラーという2つの種類があるよ。順番に説明していくね。」

1. Java のエラーとは?(基本的な説明)

1. Java のエラーとは?(基本的な説明)
1. Java のエラーとは?(基本的な説明)

Java のエラーとは、プログラムが正しく動かない原因となる問題のことです。エラーが発生すると、プログラムは正常に動作せず、修正しないと正しく動かせません。

Java のエラーは主に以下の2種類に分類されます。

  • コンパイルエラー - プログラムを書くときの間違いによって発生するエラー
  • 実行エラー - プログラムの実行中に発生するエラー

それぞれのエラーについて詳しく見ていきましょう。

2. コンパイルエラーとは?(発生する原因と例)

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. 実行エラーとは?(発生する原因と例)

3. 実行エラーとは?(発生する原因と例)
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. コンパイルエラーと実行エラーの違い(比較表)

4. コンパイルエラーと実行エラーの違い(比較表)
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. エラーを修正する方法(デバッグの基本)

5. エラーを修正する方法(デバッグの基本)
5. エラーを修正する方法(デバッグの基本)

Java のプログラムでエラーが発生したときは、適切に修正することが重要です。エラーを修正する作業を「デバッグ」と呼びます。ここでは、基本的なデバッグの方法を紹介します。

1. エラーメッセージを確認する

Java のエラーは、コンパイラや実行時のエラーメッセージとして表示されます。まずはエラーメッセージをよく読み、どこに問題があるのかを確認しましょう。

2. エラーの行番号を確認する

エラーメッセージには、エラーが発生したファイル名や行番号が記載されています。例えば、以下のようなエラーメッセージが表示された場合:


Sample.java:5: error: ';' expected
        System.out.println("こんにちは")
                                      ^

この場合、Sample.java の 5 行目でセミコロンが足りないということが分かります。

3. プログラムを少しずつ確認する

エラーが複数発生している場合は、一度にすべて修正しようとせず、少しずつ修正しながら動作を確認するのがポイントです。

4. デバッグツールを活用する

Pleiades などの開発環境には、デバッグ機能が備わっています。ブレークポイントを設定し、変数の値を確認しながらエラーを修正することができます。

6. よくあるエラーと対処法(初心者が間違えやすいポイント)

6. よくあるエラーと対処法(初心者が間違えやすいポイント)
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 のエラーを防ぐためのコーディングのコツ

7. Java のエラーを防ぐためのコーディングのコツ
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アソシエイト・プログラムを利用しています

Javaの基本の一覧へ
新着記事
【AWS】CLIの基本的な使い方まとめ【初心者向けコマンド入門】
【AWS】CLIの基本的な使い方まとめ!初心者向けコマンド入門をやさしく解説
EC2のAMI(Amazon Machine Image)とは?作成・使用方法を解説
EC2のAMI(Amazon Machine Image)とは?作成・使用方法を初心者向けにやさしく解説
EC2のステータスチェック「1/2」「2/2」「3/3」とは?エラーの対処法
EC2のステータスチェック「1/2」「2/2」「3/3」とは?エラー原因と対処法を初心者向けに解説
EC2の起動テンプレートとは?使い方と自動化活用例を紹介
AWS EC2の起動テンプレートとは?初心者向けに使い方と自動化活用例を徹底解説!
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説