・ package文 と import文

package と import はクラス定義の外で用いられるキーワードです。 Javaのプログラムでクラス定義の外に記述されるのは、 コメント文を除けば package文と import文のみです。

packageはソースファイル内のクラスが所属するパッケージ名を指定するのに用います。 パッケージを定義することでクラスをグループ化して管理することが可能になります。 またクラス間でのメンバーに対するアクセス制御を行ったり、 クラス名の衝突などを避けることができます。 大規模なアプリケーションを開発する場合には重要となります。 package文は 1個のソースファイルに 1つしか存在できません。 (同じソースファイル内に記述されたクラスは必然的に同一のパッケージとなる。) パッケージの階層構造の区切りは記号 " . " によって表します。
package文は、コメント文以外の他のすべての記述よりも先に置かなくてはいけません。 クラスのドキュメントのコメント文とクラス定義の間に package文および import文 が入るのは許されます。


/** パッケージ mytool.network に含まれるクラスの定義 */
package  mytool.network;
public class NewClass {
                :

package文は省略することもできます。 その場合にはクラスは「名前なしのパッケージ」に所属します。 したがって package文を省略したクラスどおしは、 共通のパッケージに所属していると見なされるわけです。

importは バイトコードをクラスライブラリ内で探索するための パッケージの情報を与えます。 パッケージの階層構造の区切りは記号 " . " によって表します。 package文と異なるのは、パッケージ名だけでなく最後にクラス名も指定する点です。 クラスの探索の出発点はクラスパスとして指定されたディレクトリです。 (デフォルトは、カレント・ディレクトリと JDKの標準のクラスライブラリが 置かれたディレクトリ)
import文はクラスのロードを実行させる命令ではありません。 探索の情報を提供するだけです。 import文を使用する代わりにプログラムの中で パス名を直接指定してもかまいません。次の2つの例は同じ意味です。


/** import を使った場合 */
import java.applet.Applet;
public class NewClass extends Applet {
                :

/** import を使わない場合 */
pulic class NewClass extends java.applet.Applet {
                :

java.langパッケージに所属するクラスはクラス名のみで常に参照できます。 したがって String や Thread などのクラスのために import文を記述する必要はありません。
同じパッケージに含まれる多数のクラスを利用したい場合は、 記号 " * " を用いて「すべてのクラス」を指定することもできます。


import  java.awt.*;   // java.awtパッケージのすべてのクラス