ここ数年でJavaを取り巻く環境も大きく変わって来た。数年前、Javaに触れたときには、まだまだC言語が繁栄する世の中だと思ったものだったが、Java2を迎え入れて、また、JavaChipなるものの実体も見え始めて来て、いよいよプログラミング言語の主流としての太い流れができてきた感がある。
Javaの基礎
Javaプログラムには大別して2種類ある。Javaアプリケーションと、Javaアプレットだ。最近はこれに加えて、JavaServletと呼ばれる、サーバサイドのJavaアプレットのようなものも含まれて、3種類ぐらいになっている。
Javaアプレットは、Webブラウザ用のプログラムだ。Webページに織り込む形のプログラムはこのように呼ばれ、main()を持たない。また、JavaServletはサーブレット対応Webサーバなどからよびだされ、CGIのように使用することができる。Javaアプリケーションは、普通のOS上から呼び出されるアプリケーションだ。
JARとは、Java ARchiveの略で、tar, ar, zip, lhaなどといった書庫作成アプリケーションと同じような物です。一般的な書庫作成アプリが持つような、パッケージング機能や、圧縮機能の他に、マニフェストファイルと呼ばれるメタ情報を持つことができます。
パッケージング、圧縮をすることで、Javaアプレットなどは、内部的に使用されるグラフィックやサウンドを一つのファイルとしてサーバよりダウンロードすることができます。このため、複数のファイルをダウンロードするときにいちいちセッションを開くこと無く、効率的なファイル転送を実現できます。
javaのソースコードをコンパイルしてできたCLASSファイルの位置を指定します。jdk1.1のころなどは、最初にいろいろと指定する必要があったのですが、jdk1.2以降では、jdkの標準クラスについては、指定の必要は無くなったようです。自分で作成したパッケージ(Javaの専門用語としてのパッケージ)等の位置を指定する場合には、CLASSPATHの指定が必要です。
等のように指定します。上記の例では、カレントディレクトリをCLASSPATHに追加しています。複数指定する場合には、次のようにします。
$ javac -classpath . MyWork.java
$ javac -classpath .;c:\temp MyWork.java
Javaのでは、C言語で各種の標準関数をinclude文で呼び出せたように、import文にて、標準で提供されているクラスファイルを取り込むことができます。このとき注意すべき点は、クラスは階層構造をなしていますが、パッケージ名と、そのパッケージの差部パッケージ名は無関係だということです。
例えば、java.awtパッケージと、java.awt.eventパッケージは、別物だと考えなくてはいけないということです。インポートのときには、
とやっても、java.awt.eventパッケージに含まれるクラスを利用することはできないということです。この場合、
import java.awt.* と言う風に、記述が必要になります。
import java.awt.*
import java.awt.event.*
JARファイルは仮想的な階層構造を持つことができるので、JARファイル中のファイルを表す場合に特殊なURL記述で指定します。書式は、
で指定します。例えば、カレントディレクトリにあるtest.jarファイル内のjava.gifファイルを指定する場合には、
jar:JARファイルURL!/ファイル名 のように記述します。ネットワーク上のJARファイルを指定することももちろん可能です。たとえば、www.unknown.com上のJARファイルunknown.jarファイル内のjava.gifファイルを指定する場合には、
jar:file:test.jar!/java.gif ディレクトリ/usr/local/unknown配下のunknown.jarファイルの場合は、
jar:http://www.unknown.com/unknown.jar!/java.gif となります。
jar:file:/usr/local/unknown/unknown.jar!/java.gif
JARファイルはtarファイルを作成するように作成することができる。一般的なオプションも、cvf等で指定することで作成できる。ただし、JARファイルにマニフェストファイルを指定する場合、さらにmオプションを指定する必要がある。書式は次の通りでよい。JARファイル名を test.jar マニフェストファイル名をmanifest.txtとすると、
でよい。
$ jar cvfm test.jar manifest.txt *.class *.html *.gif マニフェストファイルは、最低限以下の記述だけで良い。(デフォルトのクラスをtestClass.classとした場合)
Manifest-Version: 1.0
Main-class: testClassそれでは、JavaアプレットをJARファイル化するにはどうすれば良いだろうか。Javaアプレットは、main()を持たないのでデフォルトで起動されるクラスファイルを指定する必要はない。そこで、この場合はマニフェストファイルをとくに必要とせず、
だけで、JARファイルが作成される。
$ jar cvf test.jar testClass.class
JARファイル内のアプレットの呼び出しは、通常のクラスの呼び出しと大差はない。唯一の違いは、JARファイルを指定してあげるだけだ。<applet>タグの引数archive="test.jar"のように、jarファイルを指定する記述を追加するだけで良い。
を次のように修正。
<applet code="testClass.class" width="400" height="200">
<applet archive="test.jar" code="testClass.class" width="400" height="200">