Menu

Javaとは何か?言語、JVM、そしてどこで動くのか

Javaが実際には何なのか、JVMがどのようにして1つのコンパイル済みプログラムをどこでも動かせるようにするのか、そしてJavaでどんなソフトウェアが作られているのかを解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

一文で言うJava

Javaは、バイトコードにコンパイルされ、**Java仮想マシン(JVM)**上で動作する、静的型付けのオブジェクト指向プログラミング言語です。この1つの設計上の選択 -中立的な中間形式にコンパイルし、それを仮想マシン上で実行する- こそが、同じコンパイル済みJavaプログラムがWindows、macOS、Linux、さらにその先でも変更なしに動く理由です。

これがお決まりの最初のプログラムです。ここですぐに実行できます。

スクリプト言語よりも形式的な作法が多いですが、それは意図的なものです。Javaは明示的な構造を好みます。これらの一つひとつを、次のページにかけて解きほぐしていきます。

なぜJVMが重要なのか

ほとんどのコンパイル型言語は、ソースコードを特定のプロセッサとOS向けの機械語に直接変換します。Windows向けにコンパイルされたプログラムはMacでは動きません。Javaは回り道をします。

  1. javacがあなたの.javaソースを、バイトコードを含む.classファイルにコンパイルします。これは実在のCPUではなく、架空のマシン向けの命令です。
  2. あなたのプラットフォーム用のJVMがそのバイトコードを読み込んで実行し、進めながらネイティブの機械語命令へと翻訳します。

どのプラットフォームにも独自のJVMがありますが、いずれも同じバイトコードを理解するため、一度コンパイルすれば、その結果をJVMが存在するどこでも実行できます。これが有名なスローガン、一度書けば、どこでも動くです。

JVMは盲目的に解釈するだけではありません。ジャストインタイム(JIT)コンパイラがどのコードが最も多く実行されるかを監視し、それらのホットパスを最適化されたネイティブコードにコンパイルします。そのため、長時間動作するJavaプログラムは、完全にコンパイルされた言語の速度に迫ります。

静的型付けでオブジェクト指向

2つの性質が、Javaコードの見た目と感覚を形づくっています。

静的型付けとは、すべての変数がコンパイル時に既知の型を持ち、プログラムが実行される前にコンパイラが型をチェックすることを意味します。

countはずっとintです。これに"hello"を代入してもコンパイルは通りません。これは最初に多めにタイプするのと引き換えに、まるごと一群の誤りを早い段階で捕まえてくれます。

オブジェクト指向とは、Javaがコードをクラスに整理することを意味します。クラスはデータと、それに作用するメソッドをひとまとめにする設計図です。上のエントリーポイントでさえclass Mainの中にあります。Javaで書くもののほとんどは、クラスの中にあります。

Javaは何に使われるのか

Javaは世界で最も広く配備されている言語の1つです。次のような場所で見かけるでしょう。

  • バックエンドおよびエンタープライズシステム - 銀行、保険、大規模なWebサービス、そして何年も信頼性高く動き続ける必要があるあらゆるもの。
  • Android - プラットフォーム本来の言語であり、Kotlinと並んでも依然としてAndroidランタイムの中心。
  • ビッグデータ - Hadoop、Spark、Kafka、そしてデータエンジニアリングのエコシステムの多くがJVM上で動作します。
  • デスクトップと組み込み - IDE(IntelliJ、Eclipse)からPOS端末、スマートカードまで。

その評価は、最も簡潔な言語であることよりも、安定性、後方互換性、そして膨大な標準ライブラリにあります。何年も前にJava向けに書かれたコードは、たいてい今日でも動きます。

JavaはJavaScriptではない

名前が果てしない混乱を招くので、はっきり述べておく価値があります。JavaとJavaScriptは別物で、無関係の言語です。 歴史的なマーケティング上の理由で4文字を共有しているだけで、それ以外に重要な共通点はありません。Javaはコンパイル型で静的型付けであり、JVM上で動きます。JavaScriptは動的型付けで、ブラウザやNode.js上で動きます。一方を学んでも、もう一方が身につくわけではありません。

次へ:Javaのインストール

自分のマシンでJavaを書いて実行するには、JDK(Java Development Kit)が必要です。これはコンパイラ、JVM、標準ライブラリをまとめたものです。次のページでは、そのインストールと、正しく動くことの確認手順を順を追って説明します。

よくある質問

Javaは何に使われますか?

Javaは大規模なサーバーサイドおよびエンタープライズシステム、Androidアプリ(Android SDKおよびKotlinと共有するランタイム経由)、HadoopやSparkといったビッグデータツール、そして数えきれないほどのデスクトップ・組み込みアプリケーションを動かしています。その強みは、安定性、巨大な標準ライブラリ、そして同じコンパイル済みプログラムをあらゆるOS上で動かすJVMです。

Javaはコンパイル型ですか、インタプリタ型ですか?

どちらでもあります。Javaコンパイラ(javac)はソースコードをプラットフォーム非依存のバイトコードに変換し、JVMがそのバイトコードを実行します。最初はインタプリタとして実行し、よく通る経路(ホットパス)をジャストインタイム(JIT)コンパイラでネイティブの機械語にコンパイルします。つまりJavaはバイトコードにコンパイルされ、実行時にインタプリタ実行とJITコンパイルが行われます。

JavaとJavaScriptは同じものですか?

いいえ。歴史的なマーケティング上の理由で名前を共有しているだけの、無関係な言語です。Javaは静的型付けのコンパイル型言語でJVM上で動きます。JavaScriptは動的型付けの言語で、ブラウザやNode.js上で動きます。一方を知っていても、もう一方を知っていることにはなりません。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める