← Spring コース
2. .java・.class・バイトコード・javac
は、(Java のコンパイラ)がソースの から作るファイルで、 が読むのはこのファイルです。中身は JVM 向けの命令列で、と呼びます。TypeScript で言うと、javac が tsc、.class が tsc の出す .js に近い位置にあります。ただし .js は人が読めるソースですが、.class は人が読む形ではないバイナリです。
ソースに書くのはです。クラスは(データ)と(処理)をまとめた型の定義で、new で作った実体をと呼びます。 の付いたメソッドはクラスに属し、オブジェクトが無くても呼べます。JVM は、起動のときに指定されたクラスの というメソッドを最初に呼びます。.class はクラスや1つにつき1ファイルで、下のコードからは3つできます。
TypeScript の class と形は似ていますが、違いがあります。Node は実行するファイルを指定して上から実行します。Java は、.class にしてから動かす場合、実行するクラスを指定して main から始めます。ファイルの一番外に文は書けません。main の書き方は、 22 の既定の設定では static void main(String[] args) の形が必須で、JDK 25 で緩みました。
点線の付いた語はタップすると説明が出ます。用語集を開く →
ソース(.java)人が書く。クラスの宣言が入っている
TypeScript: .tsjavac でコンパイルする
.classクラスやインターフェース1つにつき1ファイル。中身はバイトコード
TypeScript: tsc が出す .js(こちらはソース)java クラス名(.class にしてから動かす場合)
JVM.class を読み、指定されたクラスの main を呼ぶ
Node: node ファイル名main から実行が始まる
プログラムの出力
- ・javac は JDK に入っています。tsc は npm で後から入れる別のパッケージです
- ・下のコードを javac にかけると、Greeter.class、Main.class、PoliteGreeter.class の3つができました(JDK 22)。ソースファイル1つにつき1つ、ではありません。インターフェースも1ファイルになります
- ・.class の先頭4バイトは CAFEBABE と決まっています。中の命令は、JDK に入っている javap という道具で読める形にできます。後のレッスンで扱います
- ・TypeScript の interface は tsc を通すと消えますが、Java のインターフェースは .class になり、実行時にも残ります
- ・main について、言語仕様(JLS SE 25 の 12.1.4 節)は、Java SE 25 より前は public で static で引数が1つという形が必須だった、と注記しています。JDK 25 では void main() だけのクラスも動きました。エラーの実物はサンプル集にあります
- ・.js との対応は位置のたとえです。.class には型の情報が残り、.js からは TypeScript の型が消えている、という違いもあります
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Java
図やコードに出てくる用語(タップで説明)
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗