概要
1990年代に当時のサン・マイクロシステムズによって開発されたオブジェクト指向のプログラミング言語である。C言語やその拡張言語であるObjective-C、派生言語のC++の強い影響を受けている。
「Java VM」という仮想マシン用のバイトコードを生成し、マシンごとにあった実行コードを生成するため移植性が非常に高い。
Java VMの実行環境であるJava Runtime Environment (JRE) は現在主流のOSのほとんどに実装されており、家電製品から大規模なサーバまで、適用範囲が非常に広い。ただし、一部のプラットフォームにしかない機能は、他の機種では使えないので全ての環境で同じJavaプログラムが動くわけではない。2000年代以降、最も広く使われているプログラミング言語である。
また、他の言語でも「Java VM」用のバイトコードを生成すればJavaプラットフォーム上で動かすことが可能である。例えばJava用のRubyの実行環境であるJRubyとか。
なお、名前が似ているJavaScriptはJavaの派生言語ではなく、全くの別物である。
用途
サーバーサイド
2000年代にIBMが経営資源を投入したことを契機に、Javaサーブレット技術によるサーバーサイドのJavaプログラミングが非常に多く使われるようになった。大規模なWeb環境で用いられることが多く、負荷に強い。
デスクトップアプリケーション
当初喧伝されたほど流行らなかったが、今でもたまに見かける。Java8になり、JavaFXというライブラリを使ったアプリケーションがデフォルトでJREで動かせるようになった。
携帯電話
Androidの主な開発言語として使われる。2000年代にはガラケーでも広く使われた。
組み込み
C言語やC++に替わる機器制御用言語としても広がっている。元が家電の制御用であるので適性は高い。移植性の高さと、セキュリティが高いのがメリットである。組み込みシステム自体もかつてに比べはるかに高性能化しているので、2010年代に入ってからはネイティブコードへのコンパイルをせず、Java VMを介して動作させることも増えつつある。ただ、メモリ管理を楽にするため言語仕様に組み込まれたガベージコレクション(GC)が悩みの種で、JAVAを使った開発ではGC周りのチューニングに手間をとられるという本末転倒な事態もよくある。
過去の用途
クライアントサイド
Webブラウザにプラグインを導入することで、アプレットと呼ばれるブラウザ上で動くプログラムを実行できた。登場した1990年代にはリッチインターネットアプリケーションを実現する画期的な技術として注目されたが、当時はインターネット環境とJava VM自体の双方が成熟しておらず動作が非常に遅く、後発のShockwaveやFlashの台頭もあって広まらず。
Javaアプレット自体は2018年にその役割を終えて開発キットから除外された。競合技術のFlashを含め、2014年に勧告されたオープン技術であるHTML5で完全代替できるために、既にほとんどのブラウザでもサポートが打ち切られていた。