完全限定名

Revised: Jan./1st/2002: Since: Jan./1st/2002

パッケージと言う仕組みのメリットに、クラス名の競合の解決が挙げられます。異なるパッケージでなら、同じクラス名が存在しても良いということです。そのため、クラスの識別の為には、そのクラスが属するパッケージまで含めて指定する必要があります。この識別名を、完全限定名 (fully qualified name) と呼びます。

java.langパッケージに属するクラスIntegerは、java.lang.Integerと書きます。このようにパッケージ名まで含めたクラス名を完全限定名と呼びます。通常は、完全限定名でクラスを指定します。但し、java.langパッケージだけは例外で、パッケージ名を指定しないでも自動的に探されます。

例えば、java.ioパッケージにInputStreamReaderクラスがあります。これを使うときは、単にInputStreamReaderと書くのではなく、完全限定名java.io.InputStreamReaderで指定する必要があります。同じく、BufferedReaderはjava.io.BufferedReaderと書く必要があります。

完全限定名の例

例えば、次のクラスを利用したいとします:

java.lang.Object
  |
  +--java.util.Date

通常ならば、ソースの冒頭で import します:

import java.util.Date;
class TestDate {
	public static void main(String args[]) {
		Date obj = new Date();
		System.out.println("現在時刻:" + obj);
	}
}

これは次のようにも書けます:

class TestDate {
	public static void main(String args[]) {
		java.util.Date obj = new java.util.Date();
		System.out.println("現在時刻:" + obj);
	}
}

前者の例では、 import することによって、クラス名だけで識別できましたが、後者では完全限定名を明記して識別しています。

java.lang パッケージ

例えば、全てのクラスで自動的にインポートされる java.lang パッケージには、 System クラスが定義されています。このクラスの完全限定名は java.lang.System です。原則どおりであれば、このクラスを識別する為には、完全限定名 java.lang.System を記述する必要があります。 "System" だけで識別できる理由は、 java.lang パッケージに含まれる全てのクラスが、コンパイル時に自動的に import されるからです。

完全限定名への解決

自分でクラス TestClass の先頭でパッケージ宣言を記述したとします。

package java.usr;

このクラスの完全限定名は java.usr.TestClass になります。

パッケージ名をイチイチ記述するのが面倒なので、クラス名だけで利用できるようにする仕組み、即ちクラス名を完全限定名に解決する為の仕組みがインポートです。完全限定名はインポート文で明示されているので、クラス名だけでも容易に完全限定名に解決されるわけです。

明示的にクラス名が指定されたインポート文での完全限定名解決は容易であり、ワイルドカード * を利用したインポート文でも、指定されたパッケージに登録されているクラス名がサーチされることで解決します。

インタープリタ

package tool.packA;
class PackTest {
	public static void main(String rags[]) {
		System.out.println("This is tool.packA.PackTest.");
	}
}

CLASSPATH が設定されていないとき、カレントディレクトリ C:\Java から相対パス "./tool/packA/PackTest.java" であったとします。このとき、コンパイルは次のように出来ます:

C:\Java\>javac tool\packA\PackTest.java

勿論、カレントを C:\Java\tool\packA まで移動してからクラス名だけ指定してコンパイルしても問題なく実行できます。

また、インタープリタ java の引数に完全限定名で指定することもできます:

C:\Java>java tool.packA.PackTest
This is tool.packA.PackTest.


Copyright © 2001 SUGAI, Manabu. All Rights Reserved.