パッケージとは、classを分割して保存する際につける名前の事。
class毎にコードを分割して保存する場合、同じパッケージ名をつければ、一連のプログラムとして認識される。例えば、main classとその他のclassを分割して保存できる。
一連のプログラムとは、1つのmain classと、1つ以上のclassからできるプログラムの事。
classの前に、『package 名前』をつける。
この時、package名と保存するフォルダ名は同じでなければならない。
すなわち、同じパッケージは、同じフォルダ内に保存する事になる。
package名 = フォルダ名
◎main以外のclassファイルとmain classファイルを同じpackageにする場合
1.main以外のclassファイル
先頭にpackage名を記述する。
package pa;
class Car
2.mainのclassファイル
package pa;
class Sample1
同一パッケージ内の別のclassファイルの参照を行う(newによるオブジェクトの作成)時、同一パッケージ(フォルダ)であれば、オブジェクトの作成時、classの前にパッケージ名を記述する必要は無い。
Car car = new Car(); →◎
◎異なるパッケージにした場合
※パッケージ名が異なるclassファイルを一連のプログラムとして認識させる場合
1.main以外のclassファイル
各classファイルを、class毎に分割し、さらに異なるフォルダに保存した場合、main以外のclassファイルのコードは、フォルダ間をまたぐので、classの前にpublicをつける。
public class Car
この時、コンストラクタにもpublicをつける。
public Car(){}
記述方法
package pa;
class Car
{
public Car(){}
}
※異なるフォルダに、classファイルを保存する場合も、各フォルダ名と各パッケージ名は一致させなければ参照できない。
2.mainのclassファイル
main classでも、先頭にpackage名を記述する※無名packegeにはしない。異なるpackageのclassファイルで、newによるオブジェクトの作成をする場合、パッケージを指定してオブジェクトを作成する。
記述方法
package pb;
class Sample5
{
public static void main(String args[])
{
pc.Car car1 = new pc.Car();
}
}
参照するclassのパッケージ名を、class名の前にドットを入れて記述する。
◎無名packege
そもそも先頭にパッケージ名を記述しない場合、無名のパッケージとなる。無名のパッケージから、パッケージを持ったclassを参照(newによるオブジェクトの作成)する事は出来ない。※クラスライブラリは無名のpackegeからも読み込める。
無名packageのmain classファイルからpackage名があるclass(無名でない)を呼び出したい場合は、同じフォルダ内に保存し、main classにimport文を記述して読み込ませなければならない。※cdで指定した意外のデレクトリーフォルダよりも上階層のフォルダに、保存したclassファイルは、main classで参照できない。下階層であればアクセスできる。この時、下階層のフォルダをsub packegeと呼ぶ。
◎コンパイルとプログラムの実行
1.デレクトリーの変更(cd)
packageの1階層上のフォルダを指定する。
指定したデレクトリ内にある下階層は全て認識される。
2.コンパイル(javac)
javac package名¥プログラム名.java
3.実行(java)
java package名.プログラム名
packageは、1つのpackage全体で1つのプログラムと認識するので、ディレクトリはpackageフォルダより、1階層上のフォルダを指定し、javacの後main classを指定する。
この時、main classが、異なるpacjageのclassを参照(newによるオブジェクトの作成)している場合、main classのある1階層上のフォルダ(1で指定したフォルダ)内または、それよりも下層のフォルダに、参照されるpackageは保存していなければならない。
◎import文
複数のオブジェクトの作成を行わなければならない場合、毎回、package名を記述するのは、コードの先頭に『import パッケージ名.class名;』を記述する。
※import文の記述位置は、mainクラスのpackageの属性を記述した後に入れる。
package pa
import pb.Car;
class Sample1
{
この時、パッケージ内のすべてのclassファイルを参照する可能性がある場合は、『import パッケージ名.*;』 を記述する。パッケージ名の後ろにclassファイル名は記述せずに、アスタリスクを記述する。
import.pb.*;
◎修飾子
private 同じclass内でアクセスできる。
無指定 同じパッケージ内からアクセスできる。
protected 同じパッケージ内と別のclassと別のパッケージクラスのサブクラスからアクセスできる。
public アクセス制限なし。