初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【第24回】初心者のJavaプログラミング【パッケージ】

2連続投稿です。
今回はパッケージについてです。
package
import
等のキーワードが出てきます。
ターミナルやコマンドプロンプト上でのコンパイルと実行の仕方が通常と違うので、そこのあたりも説明していきます。
そんなに難しくないはずです。

パッケージとは

パッケージとは、辞書的な説明をすると、クラスやインターフェイスの集まりのこと、となっています。
意味を持たせた集まりというイメージでしょうか。
Javaのパッケージ = ディレクトリ(フォルダ)
だとイメージすれば良いのではないかと思います。

パッケージの割り当て方

1つのソースファイルに含まれるクラスとインターフェイスを特定のパッケージに割り当てる方法があります。
めちゃくちゃ簡単で、

package パッケージ名;

を、一番最初の行に書きます。

また、複数のパッケージを階層的にすることも出来ます。
この場合はピリオドで区切ります。


余談ですが、会社で使うときにはパッケージ名としてドメイン名を使用するのが一般的とのことです。
ドメインが、
matoowo.co.jp
の場合、パッケージ名は、
jp.co.matoowo.~
みたいに逆から書いていくそうです。
その後ろにアプリ名、機能名を書いていくみたいです。
jp.co.matoowo.aprication1.dao
って言う感じです。
働いたことがないので詳しいことは良く分かりませんw

機能名ですが、

  • dao(データベースアクセス用)
  • dto(画面表示用)
  • entity(データ)
  • logic(処理)
  • controller(仲介)
  • property(設定)

らへんが使われることが多いみたいです。

また、今まで上げたソースではパッケージの指定なんて1回もしたことはなかったと思います。
パッケージの指定をしなかった場合は、デフォルトパッケージ(名前無し、無名)のパッケージに割り当てられることになります。

やや脱線しましたが、パッケージの割り当て方としてはこんな感じですね。

具体的なやり方

例を見てもらった方が分かりやすいと思うので、まず例を。

package p;

class PackageSample {
	public static void main(String[] args) {
		A a = new A();
		B b = new B();
		C c = new C();

		a.a1();
		b.b1();
		c.c1();
	}
}
package p;

class A {
	void a1() {
		System.out.println("A");
	}
}
package p;

class B {
	void b1() {
		System.out.println("B");
	}
}
package p;

class C {
	void c1() {
		System.out.println("C");
	}
}

こんな感じで、4つのソースファイルを用意します。
こいつらを全部1つのパッケージに指定するので、pというパッケージに割り当てます。
それぞれのソースファイルの最初の行ですね。

ここまではいいと思うんですが、コレをコンパイルする方法が今までと違います。
私の場合は、
Documents/Java/p
の中にこれらのソースファイルを置きました。
そうしたらまずパッケージの親ディレクトリをカレントディレクトリにします。
私の場合だと、
Documents/Java
です。
移動したらコンパイルするために、ここで次のようなコマンドを打ちます。
javac p/*.java
windowsでは
/ ではなくて¥を打ちます。
このp/*.javaの意味ですが、
/はディレクトリを指定する意味ですよね。*は全部って言う意味があるらしいです。
なので「pのディレクトリの中にある、拡張子が.javaのファイル全部に対してコンパイルします」という命令です。

このコマンドを実行するといつも通り、.classファイルがpディレクトリの中に出来上がると思います。

次に実行の方法ですが、
java p.PackageSample
という風に打ちます。
JVMの引数として、クラス名を完全修飾クラス名で指定しなければなりません。
完全修飾クラス名とはパッケージ名とクラス名を合わせたものです。
ですので、
java PackageSample
ではなく、完全修飾クラス名で
java p.PackageSample
とうようにしてやる必要があります。

無事実行されるはずです。

import

別のパッケージ内のクラスやインターフェイスを使いたい場合に使用する方法です。
例えば、java.utilパッケージのクラスやインターフェイスを使いたい場合等に利用します。

import java.util.*;

というように書きます。
*なので、java.utilパッケージの中の全てのクラスやインターフェイスを指定していることになります。

Javaのリファレンスを見るとこのようなパッケージがうるとらたくさんあります。
車輪の再発明とならないように、調べていいのがあったら積極的に使っていくのがいいぜ!


パッケージはコレで終了です。
次回は例外処理です。