クラス名とファイル名~初心者向けJava解説~それぞれの意味と違いについて詳しく解説

クラス名=ファイル名 約束ごとで決まっている
Javaでは、クラス名とファイル名には厳密なルールがあります。このルールを理解することは、Javaプログラミングの基礎中の基礎です。
基本的に、Dogクラスを定義しているファイルの名前は「Dog.java」というファイルでなければなりません。
しかし、これはあくまで「基本的に」であり、例外も存在します。
以下ではこのルールについて詳しく解説していますので是非最後までご覧ください。
また、実際に書いてプログラムを実行しながらこの記事を読み進めることでより一層理解が早まるかと思いますので、プログラムを実行できる環境のない方は、以下の記事よりeclipseをインストールし、プログラムを書きながら一緒に勉強していきましょう。
プロジェクト・クラス・ファイル それぞれの違い
プロジェクト、クラス、ファイルのそれぞれの違いと、命名のポイントについて解説します。
小難しいルールを解説する前にそれぞれの役割を理解する必要があります。
1. プロジェクト
プロジェクトは、特定の目的を達成するためのソフトウェア全体を管理する最も大きな単位です。これは、あなたが作りたいアプリケーションやシステムそのものと考えてください。
- 役割: プロジェクトは、ソースコード、画像ファイル、設定ファイル、ライブラリなど、アプリケーションを構成するすべての要素をひとつのまとまりとして管理します。統合開発環境(IDE)で新しいアプリケーションを作り始める時、最初に作成するのがプロジェクトです。
- 命名のポイント: プロジェクト名は、そのプロジェクトの内容を簡潔に表す名前にしましょう。例えば、顧客管理システムなら
CustomerManagementSystem、オンラインストアならOnlineStoreなどです。
2. ファイル
ファイルは、ソースコードを実際に書き込む場所です。Javaにおいては、基本的に.javaという拡張子を持つファイルがこれにあたります。
- 役割: 1つのファイルには通常、1つの
publicクラスが定義されます。このファイルは、コンパイルされてコンピュータが実行できる形式(.classファイル)に変換されます。 - 命名のポイント:
.javaファイル名は、そのファイルに含まれるpublicクラスの名前と完全に一致させる必要があります。- 例:
Dog.javaというファイルには、public class Dogというクラスを定義します。
3. クラス
クラスは、プログラムの設計図であり、オブジェクト指向プログラミングの基本単位です。これは、現実世界のモノや概念(犬、車、人間など)を抽象化して定義します。
- 役割:
- 属性(変数): そのモノが持つデータ(例: 犬の名前、年齢)。
- 振る舞い(メソッド): そのモノができること(例: 犬が吠える、走る)。
- 命名のポイント:
- 単数形: クラスは「犬」という一つの概念の設計図なので、**
Dog**のように単数形で命名するのが一般的です。Dogsのように複数形にすると、「複数の犬」の設計図となり、誤解を招く可能性があります。 - アッパーキャメルケース(パスカルケース): 単語の先頭を大文字にする命名規則です。例えば、
MyAwesomeClassのように、単語の区切りを大文字にすることで読みやすくします。 - 名詞: クラスはモノや概念を表すので、名詞で命名します。
- 単数形: クラスは「犬」という一つの概念の設計図なので、**
これら3つの違いについて結論
これら3つの違いは、階層構造として考えると分かりやすいです。 プロジェクト > ファイル > クラス
- プロジェクトは、家を建てるための「計画書全体」のようなイメージです。
- ファイルは、その計画書に書かれた「間取り図や設計図」の1枚1枚というようなイメージです。
- クラスは、その設計図に描かれた「部屋」や「家具」の具体的な設計(形や機能)のようなイメージです。
ファイル名に関するルール

ルール1:クラス名とファイル名は一致させる
Javaのソースコードを記述するファイル(.java)には、原則として1つのpublicクラスしか含めることができません。そして、そのpublicクラスの名前は、ファイル名と完全に一致させる必要があります。
- ファイル名:
Main.java - クラス名:
public class Main { ... }
このルールに従わないと、コンパイルエラーが発生します。もしMain.javaというファイルにpublic class MyClass { ... }と記述した場合、コンパイラは「ファイル名とpublicクラス名が一致しない」というエラーを返します。
|
1 2 3 4 5 6 7 8 9 10 |
// Main.java ファイル public class MyClass { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Dog d = new Dog(); } } |
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
コピペしてEclipseでエラーを確認しよう!
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆

👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
エラーの画像
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
ルール2:大文字・小文字も一致させる
ファイル名とクラス名は、大文字・小文字も完全に一致させる必要があります。
- 正しい例:
- ファイル名:
Dog.java - クラス名:
public class Dog { ... }
- ファイル名:
- 間違った例:
- ファイル名:
dog.java - クラス名:
public class Dog { ... }
- ファイル名:
⇒この場合もコンパイルエラーになります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//Dog.java ファイル public class dog { int age; String name; String sound; public dog() { this.age = 0; this.name = null; this.sound = null; } } |
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
コピペしてEclipseでエラーを確認しよう!
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆

👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
エラーの画像
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
ルール3:例外(publicではないクラス)
もしクラスがpublicではない場合(private、protected、または何も指定しないデフォルトの場合)、そのクラス名とファイル名は一致させなくてもコンパイルは可能です。このような非publicクラスは、publicクラスが定義されているファイル内に、入れ子として定義されることが一般的です。
|
1 2 3 4 5 6 7 8 9 |
// // ファイル名: MyMain.java public class MyMain { // このファイルに public クラスは MyMain のみ } class Helper { // このクラスは public ではないので、MyMain.java に含めることができる } |
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
エラーが起きないパターンの例
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆
このルールは、1つのファイルに複数の関連するクラスをまとめる場合に便利ですが、可読性を高めるためにも、通常は1ファイル1クラスとするのが良いプラクティスとされています。
まとめ
Javaのコンパイラは、コードの整理と管理を助けるために、この厳格なルールを設けています。これにより、クラス名からその定義が書かれているファイル名をすぐに特定でき、大規模なプロジェクトでもコードを見つけやすくなります。このルールは、クラスが「Javaプログラムの最小単位」 であるという設計思想に基づいています。

