Java言語は数多くの特徴を備えています。特に以下に挙げる点は重要です。
1)
Java言語は、オブジェクト指向の完全な実現の方針の下に設計されました。
C++ が C の機能を全て盛り込もうとして、
オブジェクト指向を徹底できなかったのとは対照的です。
プログラムはすべてクラス定義を単位に構成されます。
各モジュールの管理の方針もきわめてシンプルで首尾一貫しています。
「オブジェクト指向」と聞くと「敷居が高い」と感じる人もいるかもしれません。
確かにオブジェクト指向の言語は従来の言語に比べると、
最初に覚えるべき約束事が多くなる傾向があります。
大規模なプログラム開発には必要かもしれませんが、
簡単な入門用のプログラムに対して親切な設計とは言えないでしょう。
しかし、幸いなことに Java言語は違います。
後で述べるように、その文法はできるだけシンプルになるように配慮されています。
また JDK という優れた「道具箱」が既に存在するため、
入門者にとっても「すぐに使える」言語です。
2)
Java言語は、「機能の豊富さ」と「言語の簡潔さ」の
バランスを十分に考慮して設計されました。
本当に必要とされる機能だけを厳選して組み込んでいます。
ここでも、「何でもできる」ことを追求して肥大化してしまった C++ と対照的です。
Java言語は全く新しい言語であるにもかかわらず、データの型の名前や
制御構造などの記述法をできる限り C 及び C++ に近づけています。これは、
多くのプログラマーにとって最もなじみやすいインターフェイスを採用することで、
学習の労力を省こうという配慮です。
3)
Java言語のコードはマシンやOSに依存しません。
「Javaインタープリタ」と呼ばれるソフトウェアを通じて実行されます。
移植やリコンパイルなどの作業は一切不要です。
必要になったその時に、
ネットワークを通じて直接ロードすることも可能になります。
もちろん正確に言えば、
現時点で世界中の全てのマシンが Javaのアプリケーションを
実行できるわけではありません。
しかし Windows95 のPC, Power Macintosh, Solaris のWS といった
最もメジャーなシステムで Java が動き始めました。
数の上だけならば、既に世界の大半のマシンをカバーしたと言えるでしょう。
そして、さらに多くのシステム、たとえば Linuxなどのシステムでも
Javaを移植する動きが進行中です。
4) インタープリタ形式の言語は、一般に処理の効率が低下するのが常識です。 しかし Java言語には、それを防ぐ工夫がなされています。 Java言語のソース・プログラムは、 そのままインタープリタによって処理されるわけではありません。 疑似的な「コンパイル」の作業によって、 「バイト・コード」と呼ばれるファイルに変換されます。 バイト・コードは人間の言葉の命令を符号化し短く圧縮したものです。 そのため処理の効率を落とすことなく実行が可能になります。 エラーに対するチェックも、コンパイル時にできるだけ厳密に済ませることで、 実行時の負担を減らしています。
5)
最新のOSでは1つのプログラムの処理を、
さらに複数に分割して処理することが可能になっています。
その分割された処理のそれぞれを「スレッド」と呼びます。
Java言語には、
このスレッドによる並列処理を手軽に取り扱う機能が用意されています。
従来のプログラムでは扱いにくかったような、
並列処理向きの問題解決へ応用を期待することができます。
また複数の入力先の監視を行ったり、
バックグラウンドで音楽を再生するようなプログラムも、
非常に単純化されます。
また Javaのシステム自身が、
ガーベッジ・コレクション(使われていないメモリの自動的な解放)の
作業を独立したスレッドで行っています。
ガーベッジ・コレクションは通常の処理と並列にバックグラウンドで実行されます。
したがって Lisp などのシステムで問題になった、ユーザー・インターフェイスの
低下(突然応答が悪くなる)は発生しません。
6)
JDK(Java Development Kit) は、
開発環境の一部として多数のクラスの集まりを提供しています。
(これを「クラス・ライブラリ」と呼びます。)
非常に強力なもので、利用されることが多い機能のほとんどは、
既に用意されていると思ってかまいません。
Java言語でアプリケーションを開発するプログラマーは、
ウィンドウ・システムやネットワーク通信のためのライブラリを、
独自に準備する必要はありません。
全てのプログラマーは、
標準となるライブラリを共通に利用することになります。
しかも JDK のクラス・ライブラリは、
初心者でも容易に使いこなせる優れた設計になっています。
TCP/IP のプロトコルの詳細を知らなくても、
ネットワーク通信のプログラムを作ることが可能です。
ウィンドウ・システム上のアプリケーション開発においても同様です。
特別な経験や知識がない人でも、すぐに取り組むことができます。
必要とされる労力は、
従来の Xウィンドウや Windowsのためのプログラミングに比べて
はるかに少ないでしょう。
7)
そしてもちろん WWWとの関係です。
Java言語は WWW上で動作する(!)プログラムを開発することができます。
これらは「アプレット」と呼ばれ、
WWW のページに「張り付ける」ことが可能です。
アニメーションやインタラクティブなツールなど用途はさまざまです。
アプレットを用いることで WWWのページの表現力やユーザーインターフェイスは
飛躍的に向上します。
「Java言語=アプレット」というわけではありません。
しかし、
Java言語が脚光を浴びることになった最大の理由が WWW での活用の可能性で
あることは事実です。
あなたの作ったプログラムも、
その数分後にはインターネットを通じて世界中のマシンの上で動くのです!
さて、Java言語の利点をいろいろ並べましたが、
本当にそんな「理想的」な言語なのでしょうか?
仮に優れた点を認めたとしても、今までの資産の蓄積を放棄してまで
「乗り換える」ほどの価値と魅力があるのでしょうか?
あるいはもしかすると、次のような疑問を持った方もいるかもしれません。
「Java言語に真の意味で革新的なアイディアはあるのか? 特長として挙げられたのは、いずれも Java言語が最初というわけではない。 WWWでの利用にしても Javaの言語としての優秀性とは関係ないのでは?」
上の指摘はある意味で事実です。
Java言語は「新しいアイディアの実験場」ではないからです。
むしろ、洗練度や完成度の高さを競う「実用品」として評価を下すべきでしょう。
部分的には Java言語と同じか、あるいは優れた機能を提供してくれる言語は
いくつか存在します。
しかし、「どの角度から見ても欠陥がない言語」というのは、
なかなか捜し出せないものです。
もう一度 Java言語の特長を眺めてみてください。
すると、少し以前には両立が困難だと考えられていた要求を、
無理なく組み込んでいることに気がつくでしょう。
プログラマーが習得のため投資する労力に対して、 これほど短期間で大きな見返りを与えてくれる言語は 今だかつて存在しなかったでしょう。 この事実だけで Java言語を学ぶ十分な理由になると思います。
C 及び C++ のプログラミングの経験が豊富にある読者は、
かえってそのために誤解したり混乱したりすることがあるかもしれません。
細かい相違点を挙げておくことにします。
「C や C++ の経験はあまりない」という読者は、この節を読み飛ばしてかまいません。
Java言語が C 及び C++ に近い記述法を採用したのは、 あくまで労力を省くためです。 見かけは似ていても、 Java言語が C および C++ の「直系の言語」であるという意味ではありません。 言語の本質的な部分で、 多くの相違があることを理解しておく必要があるでしょう。