パッケージの利用

パッケージとは

パッケージ: クラスの集合

パッケージの階層構造

パッケージ間の関係を階層構造で表現する

例: java.util.ArrayList という表現は、java の標準的ライブラリの一つである java.util というパッケージに属する ArrayList というクラスを意味する。

パッケージ名の階層は、ディレクトリの階層に対応する

java.util.ArrayList は、java/util/ArrayList.class に対応している

Java標準のライブラリは、実際にはこのディレクトリの情報を保持している、いくつかのファイルにまとめられている(jar形式)。

パッケージの探索

標準では、カレントディレクトリからパッケージを探しはじめる

Class1.class
foo/Class2.class

このような配置の場合、foo というパッケージに Class2 が属していることになるので、Class1.java では Class2 のことを foo.Class2 と書けばよい。

パッケージを探す場所は、java, javac のオプション -classpath で変更できる。デフォルトは、-classpath . である。-classpath の指定とは関係なく、Java標準のライブラリはいつでも参照される。

クラスが属するパッケージの指定

package を使う

package java.lang;

これは、このクラスがjava.langに属することを宣言している

.class ファイルの場所は java/lang/ の中にする必要がある。

パッケージを用いたクラスの指定

属するパッケージとともにクラスを指定すればいい

java.util.ArrayList list = new java.util.ArrayList();

次のように import 文を使用すると、パッケージ名を省略することができる

import java.util.ArrayList;

ArrayList list = new ArrayList();

import と *

import では、「*」を使った指定ができる

import java.util.*;

この指定で、java.util.ArrayList, java.util.LinkedList,...などがすべて指定されたことになる。

ただし、「*」はディレクトリの階層をたどらないので、java.util.foo.Class は import されない

パッケージとアクセス制限

パッケージによる、変数/コンストラクタ/メソッドのアクセス制限

どこからアクセス可能か?