異なるパッケージにあるクラスを利用する場合、「net.pgtop.test.Person」のように完全修飾名で書く必要がありましたが、プログラムが複雑になってくると見難くなる欠点があります。
そこでインポート機能を使うようにします。インポートを宣言したクラスはクラス名だけで使えるようになるのでとても便利です。
【1】sample11 フォルダをフォルダごとコピーして、sample12 フォルダを作ります。
【2】sample12フォルダ と testフォルダのクラスファイルは削除して、ソースファイルだけにしてください。
・sample12フォルダ
・testフォルダ
【3】Person.java はそのままです。PersonTest.java を以下のように変更します。
*「\」はWindowsではエンマークのことです。
保存先 C:\java\sample12\net\pgtop\test
ファイル名 Person.java
package net.pgtop.test;
public class Person {
private String name;
private int age;
private String address;
public Person(String _name, int _age, String _address) {
name = _name;
age = _age;
address = _address;
}
public void say(){
System.out.println("私の名前は" + name + "です。年齢は"
+ age + "才で、住所は" + address + "です。");
}
public void setName(String _name){
name = _name;
}
public void setAge(int _age){
if (_age > 0) {
age = _age;
}else{
age = 0;
}
}
public void setAddress(String _address){
address = _address;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String getAddress(){
return address;
}
}
保存先 C:\java\sample12
ファイル名 PersonTest.java
import net.pgtop.test.Person;
public class PersonTest {
public static void main(String[] args) {
Person[] people = new Person[2];
people[0] = new Person("太郎", 21, "東京都港区");
people[1] = new Person("花子", 18, "北海道札幌市");
System.out.println("----- say()メソッドで表示");
for(int i = 0; i < people.length; i++){
people[i].say();
}
//セッターでデータを設定
people[0].setName("次郎");
people[0].setAge(-15);
people[0].setAddress("福岡県福岡市");
people[1].setName("桃子");
people[1].setAge(-25);
people[1].setAddress("宮城県仙台市");
System.out.println();
System.out.println("-----ゲッターでデータを取得して表示");
for(int i = 0; i < people.length; i++){
System.out.println(people[i].getName() + " "
+ people[i].getAge() + " " + people[i].getAddress() );
}
}
}
【4】コマンドプロンプトを起動して、カレントディレクトリを sample12 に切り替えます。
【5】javac PersonTest.java と入力し、コンパイルします。
*PersonTest.java が sample12 の直下にあるので、普通の方法でコンパイルします。
【6】java PersonTest と入力し、プログラムを実行します。
*PersonTest.class が sample12 の直下にあるので、普通の方法で実行できます。
【14】プログラムの実行結果が表示されました。
【解説】
インポートや完全修飾名はJavaのコンパイラにクラスがある場所を教えるための仕組みです。インポート機能を使ったことでクラス名だけで済むようになりましたね。これで異なるパッケージ間のクラスでもシンプルにプログラミングすることができます。
(1)importの宣言
インポート機能を使うのは簡単で、PersonTest.java に以下のように書くだけです。
import net.pgtop.test.Person;
・異なるパッケージでインポートを使わない場合
net.pgtop.test.Person[] people = new net.pgtop.test.Person[2];
people[0] = new net.pgtop.test.Person("太郎", 21, "東京都港区");
people[1] = new net.pgtop.test.Person("花子", 18, "北海道札幌市");
・異なるパッケージでインポートを使った場合
Person[] people = new Person[2];
people[0] = new Person("太郎", 21, "東京都港区");
people[1] = new Person("花子", 18, "北海道札幌市");
(2)以下のように書くと、testフォルダの中にあるクラスすべてが対象になります。
import net.pgtop.test.*;
(3)java.lang パッケージだけは例外
java.lang パッケージに属しているクラスはインポートしなくてもクラス名だけで使えます。(完全修飾名を省略できるのと同じ)
・正式には
java.lang.String
・インポートしなくても
String でOK
(4)まとめ
・同一パッケージにあるクラスはクラス名だけで使えます。
・異なるパッケージにあるクラスは、インポートか完全修飾名を使います。
・java.lang パッケージ以外は、標準で用意されているクラスライブラリでもインポートが必要です。