第 8 回 Java の特徴

今回の内容

Java は他の言語と比べてどのような特徴をもっているのかについて扱います。 主な比較対象は C 言語です。 Java しか知らないという人は必ずしも読む必要はありません。 Java の大きな特徴のひとつであるオブジェクト指向については既に扱いました。

Java Virtual Machine

Java で書かれたプログラムは、 Java Virtual Machine (Java VM) というプログラムによって実行されます。

  1. Real machine <-> Java VM <-> 自分の書いたプログラム
  2. Real machine <-> 自分の書いたプログラム

Java は 1. で普通は 2. だということです。

利点

コンピュータが違っても VM があれば自分の書いたプログラムが動きます。 また、プログラムが不正な動作をしても Java VM が終了する程度で済み、 コンピュータは被害を受けにくくなります。

欠点

Java VM を実行するための手間の分遅い。かなり遅い。 でも最近のコンピュータはかなり速いから大丈夫です (?) 。

参照型

Java にはポインタはありません。代わりに 参照型 があります。 C 言語既習者向けに参照型を一言で説明すると、アドレス計算のないポインタです。

変数はデータの入れ物であると第 2 回に説明しました。 参照型の変数の場合には、「データがどこにあるか」という情報が入ります。 例えば、オブジェクトや配列は参照型です。 オブジェクトや配列はデータのサイズが大きいので、 代わりにその場所を変数に入れておくのです。

Garbage collection

参照型で扱うデータ用のスペースは、プログラムの実行中必要に応じて確保されます。 データが不要になったときはそのスペースを解放しなければなりません。 これを メモリ管理 といいます。 大量のデータを扱うプログラムがスペースを適切に解放しないでいると、 いずれ空きスペースが不足して、それ以上の実行が不可能になります。

多くの言語ではその作業をプログラマが行わなければならない (不要になったら解放する文をソースに書く) のですが、 Java では不要になったスペースを自動的に Java VM が探してきて解放してくれます。 そのような機能を Garbage collection と呼びます。 (他にも Garbage collection を提供する言語は多くあります)

不要メモリの解放を抜かりなく行うのは容易ではないので、 Garbage collection はかなり魅力的な機能だといえるでしょう。 ただし、これも実行を遅くしてしまうという欠点があります。

Java API

多くのプログラムで利用される機能は、言語とセットで用意されているのが普通です。 それらを (利用する方法を) API といいます。 Java の API はすべて、機能ごとにクラスとしてまとめられています。 例えば、Applet クラスを使えば、アプレットを作ることができます。

そのようなクラスはとてもたくさんあるので、機能ごとに分類されています。 例えば、 Applet クラスは、 java.applet という分類に含まれていて、 フルネームは java.applet.Applet となります。 このように、 API のクラスを使うときはフルネームを使う必要があります。 (しかし、ソースに何回も長いフルネームを入力するのは大変なので、 ソースの先頭に import java.applet.Applet; と書くことによって、 以降は Applet と書くだけで使えるようになります)

API の中から使う機能を探すときは、 ドキュメントの「Java 2 プラットフォーム API 仕様」を見ます。 闇雲に探すのは効率が悪いので、まずはどのような分類があるのかを見てみましょう。

よく使う API

java.applet
アプレット
java.awt
ウィンドウやボタンなどのグラフィカルなもの
java.io
入出力関係
java.lang
Java 言語の実装に使われているクラス群
java.lang.Math には sin などの数学関数や乱数生成関数がある
java.util
便利なクラスがいろいろある

どのようなプログラムが作りたいかよく考えてみてください。 そのプログラムを作るのに必要な手助けは個別にします。 また、API の使い方は一部「お役立ち集」の方で扱いますので、そちらもどうぞ。

まとめ

Java はどんな言語であるかを学びました。