目次へ戻る 下へ↓
19、クラスのおさらい
作成者:Fumitaka Makino 更新日:2003-04-21 15:45

・クラスパスの意味

いままで、クラスパスをとりあえず通していた方も多いかと思います。ではなぜクラスパスを通さなければいけないのでしょうか?話は非常に簡単です。クラスパスはあるコードが実行されたときJVMがクラスのバイトコード(*.classファイル)を探しに行く場所の指定です。つまりクラスの探索範囲だと思ってください。通常クラスパスは実行時のコマンドライン(javaやjavac)や、環境変数で引き渡されます。コマンドラインの時には下記のように「-classpath」オプションによって行います。

パス区切り文字(赤字)に注意!Windowsの場合はセミコロンでUNIX系の場合はコロン
Windowsの場合
javac -classpath .;c:\javastudy;wowtool.jar test.java
 
UNIX系の場合
javac -classpath .:/home/makino/javastudy:wowtool.jar test.java

ではクラスパスを通すときのディレクトリの指定方法を説明します。クラスパスと言うのは物理的にクラスファイルが存在するディレクトリを指定すればよいわけではありません。以下のクラスに関するクラスパスについて考えてみましょう。

例:Testクラス

パッケージ jp.co.wownet.common.cpath
クラス名 Test
フルパスのクラス名 jp.co.wownet.common.cpath.Test
物理的なフルパスのクラスファイル (Win) c:\javastudy\jp\co\wownet\common\cpath\Test.class
  (UNIX) /home/makino/javastudy/jp/wownet/common/cpath/Test.class

このクラスを利用するときには下記のディレクトリに対してクラスパスを設定します。

(Win) c:\javastudy
(UNIX) /home/makino/javastudy

なぜ「c:\javastudy\jp\co\wownet\common\cpath」をクラスパスにしてはいけないのでしょうか?それは「jp以下はパッケージに対応するディレクトリ」だからです。つまりJVMに対してクラスパスとして通知すれば良いのは「パッケージ無しのクラスが配置されるディレクトリ」です。これは一般に「クラスルート」などと呼ばれます。クラスルート以降はJavaのパッケージの概念なので、JVMがパッケージ名にしたがってクラスルートからディレクトリを探索することができます。要するにクラスパスを通すと言うのは、ディレクトリを「クラスルートに追加」すると言う行為なのです。また利用したい、もしくは利用しているクラスは必ずクラスパスで指定されたディレクトリ内になければなりません。仮にクラスパスに含まれないクラスを利用しているプログラムを実行したとしたら、ClassNotFoundExceptionが発生しプラグラムが中断されます。ちなみにJARファイルは、解凍をすると、その直下にクラスファイルやパッケージディレクトリが存在するので「クラスルート」そのものだと思って構いません。そのためクラスパスの指定時にはディレクトリ、もしくはJARファイルが指定できるのです。

例:クラスパスとクラスローダー

このようにクラスを探し出すクラスローダーはクラスパスで設定されたディレクトリの範囲内しかクラスファイルを探しにいけません。

 

↑上へ 目次へ戻る