Javaを学び始めたとき、「.javaと.classの違いって何だろう?」と疑問に思った方も多いのではないでしょうか?この記事では、Javaの基本である.java
と.class
ファイルの違いを、最新版の情報を交えてわかりやすく解説します。
1. .java
ファイルとは?
.java
ファイルは、Javaのソースコードが記述されたファイルです。
特徴
- 人間が読める形式で書かれており、Javaの構文に従っています。
- プログラムのロジックや処理内容を記述します。
- 直接実行することはできません(ただし、Java 11以降では例外的に実行可能です)。
-
.java
ファイルは開発者が編集・保存する主要なファイルです。
例
以下は、典型的なHelloWorldプログラムの.java
ファイル例です:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
2. .class
ファイルとは?
.class
ファイルは、.java
ファイルをコンパイルして生成される、Java仮想マシン(JVM)が解釈可能なバイトコード形式のファイルです。
特徴
- **コンパイル(javacコマンド)**によって生成されます。
- JVMが実行できる形式で記録されており、プラットフォームに依存しません。
- 人間が直接読める形式ではありませんが、クラス名やメソッド名などのメタデータを含むことがあります。
生成方法
以下のコマンドで、.java
ファイルをコンパイルして.class
ファイルを生成します:
javac HelloWorld.java
このコマンドを実行すると、同じディレクトリにHelloWorld.class
が生成されます。
3. Java 11以降の新しい特徴
Java 11以降では、.java
ファイルをコンパイルせずに直接実行することが可能になりました。
実行方法
次のように、java
コマンドで.java
ファイルを直接指定して実行できます:
java HelloWorld.java
この機能により、簡単なプログラムを素早く試すことができるようになり、初心者にも便利です。
4. なぜ.java
と.class
の両方が必要なのか?
Javaでは「コンパイルしてから実行」する仕組みを採用しています。この仕組みにより、**プラットフォームに依存しないプログラムの実行(Write Once, Run Anywhere)**が実現されています。
-
ソースコード記述(.java)
開発者がコードを記述し、編集する形式。 -
コンパイル(.class生成)
javac
コマンドで、.java
ファイルをバイトコード形式の.class
ファイルに変換します。 -
実行(JVMによる解釈)
.class
ファイルをJVMが解釈し、プログラムを実行します。
5. .class
ファイルの中身を覗いてみる
.class
ファイルは基本的に人間が読めませんが、javap
コマンドを使うことでバイトコードを確認できます。
使用例
javap -c HelloWorld.class
出力例
public class HelloWorld {
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello, World!
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
このように、JVMが実行する命令の内容が表示されます。
6. .java
と.class
の比較表
ファイル形式 | 役割 | 説明 |
---|---|---|
.java |
ソースコード | 人間が読める形式でプログラムを記述 |
.class |
バイトコード | JVMが実行可能な形式で保存 |
7. まとめ
-
.java
: ソースコードを記述するファイル。Javaの構文に従ってプログラムを書きます。 -
.class
:.java
ファイルをコンパイルして生成されるバイトコードファイル。JVMが実行可能な形式です。
Javaの基本的な流れは以下の通りです:
.java
を作成- コンパイルして
.class
を生成 .class
を実行
Java 11以降では、.java
を直接実行できるため、簡単なプログラムの試作が容易になりました。
この仕組みを理解することで、Javaの基礎だけでなく、他のプログラミング言語にも応用できる考え方を身につけることができます。この記事が参考になったら、ぜひフィードバックをお寄せください! 😊