packageの使い方
 

多数のクラスを整理するためのpackage

多分皆さん初めてJavaに出会った時に、HelloWorldクラスを作った(見た)ことでしょう。
世界一有名なJavaクラス
/**
 *  世界中で7億人が見たクラス
 *  @author YTP
 */
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}
                        

ところがこれだけではつまらないので、他のクラスから利用されるようなクラスを 作ってみたくなりますよね。
一人前のクラス
/**
 *  初めて作るであろういっちょまえのクラス
 *  @author YTP
 */
public class Message {
    /**
     *  インスタンス変数だってあるもん
     */
    private String sMessage_ = null;
    
    /**
     *  初めてのコンストラクタでーす
     */
    public Message() {
    }
    
    /**
     *  初めてのセッターメソッドでーす
     *  @param sMessage 幸せなメッセージを下さい
     */
    public void setMessage(String sMessage) {
        sMessage_ = sMessage;
    }
    
    /**
     *  お披露目でーす
     */
    public void showMessage() {
        System.out.println(sMessage_);
    }
}
                        

自分が作ったクラスを使うクラス
/**
 *  自分が作ったクラスを呼びたいっ!!
 *  @author YTP
 */
public class HelloWorld2 {
    public static void main(String[] args) {
        Message mumumu = new Message();
        mumumu.setMessage("Hello world!");
        mumumu.showMessage();
    }
}
                        

ここまでは何のことはなく動きます

でも、そんなクラスをいくつも作っているうちに、ディレクトリの中はクラスでいっぱい!
Javaにはpackageなるものがあるそうで、それを試してみんとす。
パッケージ構成は、
  • otamesi
  • (Messageクラス)
  • test
  • (HelloWorld2クラス)
の二つとしましょう。

まずはMessageクラスにパッケージ名を付けます。
packageの付いたMessageクラス
package otamesi;

/**
 *  パッケージ名を付けてみました
 *  @author YTP
 */
public class Message {

★略

                        

パッケージはディレクトリと対応するので、otamesiというディレクトリを作って そこにMessage.javaを置きコンパイルします。
packageの付いたMessageクラスをコンパイル
C:\Source\Java\otamesi>javac Message.java

C:\Source\Java\otamesi>
                        
うまくいきました。

続いてMessageクラスを使う側のHelloWorld2クラスも直します。
packageの付いたHelloWorld2クラス
package test;

/**
 *  自分が作ったクラスを呼びたいっ!!
 *  @author YTP
 */
public class HelloWorld2 {
    public static void main(String[] args) {
        Message mumumu = new Message();
        mumumu.setMessage("Hello world!");
        mumumu.showMessage();
    }
}
                        

これで準備万端、testディレクトリを作ってそこでコンパイルしてみます。
天罰が下った図 その2
C:\Source\Java\test>javac HelloWorld2.java
HelloWorld2.java:9: シンボルを解釈処理できません。
シンボル: クラス Message
位置    : test.HelloWorld2 の クラス
        Message mumumu = new Message();
        ^
HelloWorld2.java:9: シンボルを解釈処理できません。
シンボル: クラス Message
位置    : test.HelloWorld2 の クラス
        Message mumumu = new Message();
                             ^
エラー 2 個

C:\Source\Java\test>
                        
うぎゃ〜、でたぁー、シンボルを解釈処理できません じゃー!!!
いやちょっと待てよ。パッケージを作ったんだから、 さっきやったimportがないとうまくいかんではないか。
そうそう、importじゃ
packageとimportの付いた完全無欠なHelloWorld2クラス
package test;

import otamesi.*;

/**
 *  自分が作ったクラスを呼びたいっ!!
 *  @author YTP
 */
public class HelloWorld2 {

★略
                        

今度こそおっけー、コンパイルしてみます。
八方塞がりの図
C:\Source\Java\test>javac HelloWorld2.java
HelloWorld2.java:3: パッケージ otamesi は存在しません。
import otamesi.*;
^
HelloWorld2.java:11: シンボルを解釈処理できません。
シンボル: クラス Message
位置    : test.HelloWorld2 の クラス
        Message mumumu = new Message();
        ^
HelloWorld2.java:11: シンボルを解釈処理できません。
シンボル: クラス Message
位置    : test.HelloWorld2 の クラス
        Message mumumu = new Message();
                             ^
エラー 3 個

C:\Source\Java\test>
                        
うぉぉぉぉぉぉぉぉ〜、なんじゃこりゃぁぁぁぁぁぁ!!!!さっきよりエラーが増えたーっ!!
しかも、「パッケージ otamesi は存在しません」「シンボルを解釈処理できません」 じゃとー!!!
爆死するしかないのかっー?!!

いえいえ、そんなことはありません。これでやっとCLASSPATH大明神のお出ましです。

CLASSPATHの役割に続きます。


Copyright © 2002-2016, Your Technology Partner. All rights reserved.