カテゴリ: Java 更新日: 2026/02/05

JavaのClassNotFoundExceptionを徹底解説!初心者でもわかる原因と解決方法

ClassNotFoundExceptionクラス
ClassNotFoundExceptionクラス

先生と生徒の会話形式で理解しよう

生徒

「Javaでプログラムを実行したら、ClassNotFoundExceptionっていうエラーが出たんですが、これは何なんでしょうか?」

先生

「それはJavaのクラスが見つからないときに発生する例外です。パッケージはjava.langに含まれていて、よく遭遇するエラーのひとつです。」

生徒

「どういうときに発生するんですか?」

先生

「クラスパスに必要なクラスが含まれていないときや、外部ライブラリを読み込めていないときなどに発生します。詳しく見ていきましょう!」

1. ClassNotFoundExceptionとは

1. ClassNotFoundExceptionとは
1. ClassNotFoundExceptionとは

JavaのClassNotFoundExceptionは、指定されたクラスがクラスローダーによって見つからなかったときに発生するチェック例外です。Javaプログラムを動かすときに頻繁に遭遇する例外のひとつで、特に外部ライブラリやフレームワークを使う場面で発生しやすいです。Java初心者がSpringやJakartaEE、Hibernateなどを学習しているときによく直面するため、原因と解決方法を理解しておくことが大切です。

2. 発生する典型的なケース

2. 発生する典型的なケース
2. 発生する典型的なケース

ClassNotFoundExceptionが発生するのは、主に以下のようなケースです。

  • 外部ライブラリ(JARファイル)がクラスパスに含まれていない
  • Class.forNameで指定したクラス名が誤っている
  • Webアプリケーションで依存関係の設定ミスがある
  • ビルドツール(GradleやMaven)の設定が不完全

特にJavaでデータベース接続を行うときに「JDBCドライバクラスが見つからない」という形で発生するのが代表例です。

3. サンプルコードで理解しよう

3. サンプルコードで理解しよう
3. サンプルコードで理解しよう

次のコードは、Class.forNameでJDBCドライバをロードしようとして、クラスが見つからない場合にClassNotFoundExceptionが発生する例です。


public class DatabaseLoader {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            System.out.println("ドライバのロードに成功しました。");
        } catch (ClassNotFoundException e) {
            System.out.println("クラスが見つかりません: " + e.getMessage());
        }
    }
}

クラスが見つかりません: com.mysql.cj.jdbc.Driver

この場合、MySQLのJDBCドライバがクラスパスに含まれていないためにエラーが発生しています。

4. 解決方法

4. 解決方法
4. 解決方法

ClassNotFoundExceptionを解決するには、以下のポイントを確認します。

  • 必要なJARファイルをクラスパスに追加する
  • GradleやMavenの依存関係を正しく設定する
  • クラス名の指定に誤りがないか確認する
  • WebアプリケーションではWEB-INF/libにライブラリが配置されているか確認する

例えばGradleでMySQLドライバを利用する場合は、次のようにbuild.gradleに依存関係を追加します。


dependencies {
    implementation 'mysql:mysql-connector-java:8.0.33'
}

この設定を加えることで、Gradleが自動的にJARをダウンロードし、クラスパスに追加してくれます。

5. java.langパッケージとの関係

5. java.langパッケージとの関係
5. java.langパッケージとの関係

ClassNotFoundExceptionはjava.langパッケージに含まれています。java.langパッケージは、Javaプログラムで常に利用可能な基本的なクラス群を提供しており、特別にインポートしなくても使用できます。Objectクラス、Stringクラス、Mathクラスなどと同様に、例外クラスも多数含まれています。

ClassNotFoundExceptionはExceptionクラスを継承したチェック例外なので、try-catchで処理する必要があります。Javaの基本構造を学ぶ際には、例外処理の基礎と一緒に理解すると効率的です。

6. 似ている例外との違い

6. 似ている例外との違い
6. 似ている例外との違い

ClassNotFoundExceptionとよく比較されるのがNoClassDefFoundErrorです。両者は名前が似ていますが、発生タイミングが異なります。

  • ClassNotFoundException:プログラム実行中にクラスが見つからない場合
  • NoClassDefFoundError:コンパイルは成功しているが、実行時にクラスが読み込めない場合

Java初心者にとって紛らわしいエラーですが、前者は例外(チェック例外)でcatch可能、後者はエラーでcatchできない場合が多いという違いがあります。

7. 初心者が覚えておくべきポイント

7. 初心者が覚えておくべきポイント
7. 初心者が覚えておくべきポイント

ClassNotFoundExceptionを回避するためには、次の点を意識して開発を進めるとよいです。

  • クラスパスを常に意識してプロジェクトを構成する
  • GradleやMavenの依存管理を正しく設定する
  • 外部ライブラリのバージョンや配置場所を確認する
  • 開発環境と本番環境で同じ設定になるよう注意する

これらを意識することで、Javaの例外処理やエラー解決力が大幅に向上し、安定したプログラム開発が可能になります。

Javaの基礎を最初から体系的に学びたい人には、 初心者向けで定評のある定番入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「StartingWith」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New4
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.4
Java&Spring記事人気No4
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説