CLASS ファイル形式とは?
.class ファイルには、Java プログラミング言語で記述された コンパイル済みソースコード が含まれています。.class ファイルは、1つ以上のクラスを定義する .java ソースファイル から Java コンパイラによって生成されます。各 .class ファイルはコンパイルが成功した結果であり、Java 仮想マシン (JVM) によって実行されるクラスのバイナリ表現であるバイトコードを保持しています。
.class ファイルは、.java ソースファイルのコンパイル中に自動的に生成されます。バイトコードはプラットフォームに依存しないため、互換性のある JVM がインストールされているオペレーティングシステムであれば、同じ .class ファイルが動作します。1つの .java ソースファイルに1つ以上のクラスを含めることができ、コンパイルプロセス中に各クラスが独自の .class ファイルを取得します。
.java ファイルから .class ファイルへのコンパイルは、Java Development Kit (JDK) に含まれる javac コマンドを使用して実行されます。IntelliJ IDEA や Eclipse などの IDE を含むほとんどの Java プログラミング環境では、プログラマがコードを書く際に自動的に .class ファイルをコンパイルします。
Java Runtime Environment (JRE) は java コマンドを介した .class ファイルの実行をサポートしていますが、JRE には javac コンパイラが含まれていないため、コンパイルを行うことはできません。
すべての .class ファイルは 4 バイトのマジックナンバー 0xCAFEBABE で始まり、その後にコンパイルに使用された Java リリースを特定するマイナーおよびメジャーバージョンフィールドが続きます。複数の .class ファイルは、配布やデプロイのために通常 JAR アーカイブ にまとめられます。
JVM には多くのバージョンがあるため、すべての .class ファイルがすべてのバージョンのランタイムと互換性があるわけではないことに注意してください。新しい Java メジャーバージョンをターゲットにしてコンパイルされたファイルは、古い JVM ではロードできません。
セキュリティと安全性
リスク: MEDIUM.class はコンパイルされたコードです。JVM で実行(«java MyClass»)すると、ユーザーの権限で実行されるため、不明なクラスは不明な JAR や EXE と同様にマルウェアを含んでいる可能性があります。ダウンロードしたコンパイル済み Java は信頼できないものとして扱い、信頼できるソースからのクラスのみを実行してください。単に .class をデコンパイルまたは逆アセンブル(JD-GUI, javap)するだけであれば、実行はされないため安全です。バイトコードはプログラムのロジックを明らかにするため、難読化されていない限り、コンパイルしたものは他者によってデコンパイルされる可能性があることに注意してください。
形式の詳細
概要CLASS ファイルを開くプログラム
技術的詳細
詳細仕様| フォーマットタイプ | コンパイル済み Java バイトコード (バイナリ) |
| MIME タイプ | application/java-vm |
| マジックバイト | 0xCAFEBABE (ファイルオフセット 0 の 4 バイト) - すべての有効な .class ファイルに存在 |
| バージョンエンコーディング | バイト 6-7 (メジャーバージョン) がターゲットの Java リリースを特定します。例: 52 = Java 8, 61 = Java 17, 65 = Java 21 |
| 実行環境 | `java` コマンドを介した Java 仮想マシン (JVM) |
| コンパイルツール | Java Development Kit (JDK) に含まれる `javac` コンパイラ |
| プラットフォーム独立性 | バイトコードは CPU アーキテクチャに依存せず、互換性のある JVM を備えた任意の OS で動作 |
| 1ファイルにつき1クラス | 各トップレベルクラスまたは静的ネストされたクラスは、個別の `.class` ファイルにコンパイルされます |
| 内部クラスの命名 | 内部クラスや匿名クラスは、名前に `$` を含む追加のファイルを生成します (例: `Outer$Inner.class`) |
| 定数プール | 各ファイルには、文字列リテラル、クラス名、フィールド/メソッド記述子を保持する構造化された定数プールテーブルが埋め込まれています |
| 命令セット | ネイティブ CPU 命令セットとは無関係な、JVM バイトコード命令セット (約 200 個のオペコード) を使用します |
| バイトコード検証 | JVM は実行前に `.class` ファイルの構造と型安全性を検証し、不正な形式や改ざんされたファイルを拒否します |
| デコンパイル | `javap -c` (JDK 組み込み) で逆アセンブルするか、JD-GUI や CFR などのツールで Java ソースにデコンパイル可能 |
| パッケージング | 通常、複数の `.class` ファイルとマニフェストを保持する `.jar` アーカイブ (ZIP ベースのコンテナ) 内にバンドルされて配布されます |
| Android との非互換性 | Android は `.class` ファイルを直接実行しません。`d8` ツールがそれらを Android Runtime (ART) 用の `.dex` バイトコードに変換します |
| リリース日 | 1995-1996 (Java 1.0) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | docs.oracle.com |
CLASS の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。CLASS ファイルについて最初の質問をしてみましょう。