パッケージ インポート package import

パッケージとは、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();    →◎

pa.Car car = new pa.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によるオブジェクトの作成をする場合、パッケージを指定してオブジェクトを作成する。

pa.Car car = new pa.Car();

記述方法

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  アクセス制限なし。