パッケージ1

javaのプログラムの基本はクラスの作成から始まります。
単純なプログラムを作成していく場合は少ないクラスの利用だけですみますが、
大きなプログラムを作成していく場合はたくさんのクラスを利用していきます。
パッケージとはクラスやインタフェースの集りで、用途などで分類します。
javaではobjectクラスを筆頭に様々なクラスを用意されていますが、これらもすべてパッケージで管理されています。
パッケージが異なると同じ名前のクラスでも別のクラスとして扱われます。

パッケージはディレクトリ階層によって管理されます。


上の図を例に挙げて説明しますがまず、javaというパッケージがあったとします。この中にパッケージAと パッケージBがあります。 Aパッケージにはクラスとして、SampleA,SampleB,SampleCクラスがあり パッケージBにはSampleA,SampleD,SampleEクラスがあります。
パッケージAにもパッケージBにもSampleA.classは存在しますが、その二つのクラスはまったく別物のクラスとして扱われます。

パッケージは自分でも作成できます。 パッケージを作成した場合はまず、必ずプログラムの先頭に
 package パッケージ名; で宣言してやる必要があります。

次にパッケージを利用するにはインポートしなければいけません。

 

インポートの仕方


   import パッケージ名.*;
または import パッケージ.クラス名;

とします
import の時に *(アスタリスク)でimportしてやると、そのパッケージ内のクラスをすべて
利用することができます。

少し、ややこしいことをしますがパッケージの役割と意味を理解したいと思いますので
頭を整理しながらプログラムをつくっていきます。

まずは、ディレクトリとしてフォルダを作成してください。
そのフォルダを名前をAとします。(このフォルダがパッケージになります)
ファルダーを作成する場所は今までjavaファイルを保存していた場所にします。

サンプルプログラム(SampleA.java)

package A;                      //パッケージの宣言


public class SampleA{

    public void methodA(){

       System.out.println("これはパッケージAに属しています");
     }

}

プログラムをコピーする場合すべて選択をクリックしてください。

このSampleAは最初にパッケージ宣言されています。
したがって、このSampleAをフォルダAに保存します。

サンプルプログラム(Sample51.java)

import A.*;                  //インポート宣言

class Sample51{
    public static void main(String args[]){

    SampleA obj = new SampleA();

obj.methodA();
} }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

プログラム自体は簡単ですが、SampleAは最初にパッケージ宣言されているので、
このSampleAは パッケージ A に属していることがわかります。
まず、気になることはコンパイルが javac A\*.java となっていることです。
それは、ディレクトリ(ファルダー)の階層の問題になります。

今まではC:\java\hpの中にファイルを保存していたのでjavac だけでコンパイルできました。
しかし、SampleAはhpフォルダの中にAというフォルダー(パッケージ)作成しています。
つまり、SampleAは C:\java\hp\A の中に存在します。

したがって呼び出すときはディレクトリのパスを指定してやる必要があります。

また、*(アスタリスク)をつけることでパッケージ A の全てのファイルをコンパイル できることになります。

次にSample51ではインポートして パッケージ A を 呼び出しています。
このことより パッケージ A のクラスを 利用できるようになりました。

後は通常のインスタンスを行っています。
それが、Sample A obj = new SampleA();
です。
obj.methodA();でSampleAのメソッドを呼び出されています。

では、もうひとつパッケージを作成してみます。
今度もパッケージ A と同じ要領でパッケージ B を 作成していきます。

サンプルプログラム(SampleB.java)

package B;                    //パッケージ宣言

public class SampleB{

   public void methodB(){


       System.out.println("これはパッケージBに属しています");

      }
}

プログラムをコピーする場合すべて選択をクリックしてください。

サンプルプログラム(Sample51_1.java)

import A.*;                         //インポート宣言
import B.*;

class Sample51_1{
    public static void main(String args[]){

SampleA obj1 = new SampleA(); SampleB obj2= new SampleB(); obj1.methodA(); obj2.methodB(); } }

プログラムをコピーする場合すべて選択をクリックしてください。

Sponsored link

コンパイル・実行してみます。

今度はSample51_1ではパッケージA と パッケージBをインポートしています。
それを、共にインスタンスしてそれぞれのメソッドを呼び出しました。
これがパッケージの利用の仕方です。

また、今回SampleAにもSampleBにもクラスとメソッドにpublicの修飾子を付けています。
もしつけなかったらどうなるでしょうか?
確認したいと思います。

publicを付けなかった場合

package A;                      //パッケージの宣言


 class SampleA{

 void methodA(){

       System.out.println("これはパッケージAに属しています");
     }

}

プログラムをコピーする場合すべて選択をクリックしてください。

わかりやすくさきほどのSampleA.javaのプログラムをpublicを削除してみました。
これでコンパイル・実行してみたいと思います。

実はコンパイルはできるのですが実行するとエラーになります。
それは、クラス修飾子のところでも少し説明したと思うのですが

ほかのパッケージのクラスを呼び出すときはpublicで指定してやらなければいけないからです。

いくらimportしたクラスでもpublic指定されていないクラスは呼ぶことができません。

ページのトップへ戻る