バナー画像

Javaでのシステム開発を行ったことがある方の中には、コードファイル内やプロジェクトツリー上にパッケージ(package)という表記を見たことがある方も多いのではないでしょうか。

本記事では、Java開発初心者の方向けにパッケージの概要から実際の使い方についてサンプルコードを掲載しながらご紹介していきます。

Javaのパッケージとは


Javaでは、パッケージを使ってクラスやインターフェースといったシステムを構成するファイルをグループ化させることが出来ます。

パッケージの役割

Java開発では、膨大なクラスファイルからシステムが構成されることも少なくないため、クラスファイルが煩雑になってしまいがちです。

パッケージを利用することにより、膨大なクラスを整理して管理することが出来るようになります。

実はJavaの仕様上、クラスファイルはいずれかのパッケージに属している必要があるため、パッケージを指定していない場合でもデフォルトパッケージに属している扱いとなります。

パッケージを利用するメリット

パッケージを利用するメリットとしてまず挙げられるのが、同名のクラスファイルを別パッケージであれば作成出来るという点です。

パッケージを指定しない場合、Javaでは同名のクラスファイルを作成することが出来ませんが、パッケージを切り分けることで同一パッケージ内でなければ同名のクラスファイルを作成することが出来ます。

またJavaには言語仕様により予め確保された予約語(Systemなど)がありますが、オリジナルのパッケージを作成することにより、パッケージ内であればJavaの予約語も使用することが可能です。

Javaでパッケージの利用方法


ここからは実際にJavaのパッケージ利用法についてご紹介していきます。

パッケージ宣言

パッケージの宣言は、Javaファイルの先頭にpackage文を記述する必要があります。

package パッケージ名;

階層化

パッケージを階層化させる場合、「.」でパッケージを繋げて記述します。

package パッケージ1.パッケージ2.パッケージ3;

パッケージの呼び出し方

パッケージの特定クラスを呼び出す場合、呼び出し側のクラスが同一パッケージかパッケージ外に存在するかにより条件が変わります。

同一パッケージのクラスを呼び出す場合、クラス名を記述するだけでアクセスすることが可能です。

外部パッケージ

外部パッケージのクラスを利用する場合、import文を記述して対象のパッケージを指定する必要があります。

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

パッケージの下にクラス名を記述した場合は、明記したクラスだけが利用出来るようになり、「*」を指定した場合はパッケージ配下のクラスファイル全てにアクセスすることが出来るようになります。

パッケージを使ったJavaサンプルコード


では実際にパッケージを使ったJavaサンプルコードで具体的な使い方を確認していきましょう。

サンプルコード1

1つ目のサンプルではパッケージ指定なしの「Main.java」から、「パッケージ指定なし(Test1.java)」「パッケージ指定あり(Test2.java)」「階層化されたパッケージ(Test3.java)」それぞれに格納されたクラスの処理を呼び出しています。

ルートフォルダからの階層

src $ tree
.
├── Main.java
├── Test1.java
└── sample1
    ├── Test2.java
    └── sample2
        └── Test3.java

2 directories, 4 files

Main.java

import sample1.Test2;
import sample1.sample2.Test3;

public class Main {
	
	public static void main(String[] args) {
		Test1.execute();
		Test2.execute();
		Test3.execute();
	}
}

1,2行目に記述しているimport文により、他のパッケージのクラスファイルにアクセスすることが出来るようになっています。

Test1に関しては同一パッケージ(デフォルトパッケージ)に格納されているため、import文不要でアクセス可能です。

Test1.java

public class Test1 {
	public static void execute() {
		System.out.println("Test1から出力しています。");
	}
}

シンプルなコンソール出力処理で、packageの宣言は行っていません。

Test2.java

package sample1;

public class Test2 {
	public static void execute() {
		System.out.println("Test2から出力しています。");
	}
}

1行目に記述しているとおり、「sample1」パッケージ内のクラスファイルであることを宣言しています。

Test3.java

package sample1.sample2;

public class Test3 {
	public static void execute() {
		System.out.println("Test3から出力しています。");
	}
}

Test3に関しては「sample1」パッケージ内部に「sample2」パッケージを作成し、格納されていることを宣言しています。

出力結果

これらのプログラムを実行すると下記の結果が出力されます。

Test1から出力しています。
Test2から出力しています。
Test3から出力しています。

サンプルコード2

次のサンプルは異なるパッケージに同一クラス名のファイルが存在するプログラムを実行してみます。

ルートフォルダからの階層

src $ tree
.
├── Main.java
├── Test.java
└── sample1
    ├── Test.java
    └── sample2
        └── Test.java

2 directories, 4 files

Main.java

public class Main {
	
	public static void main(String[] args) {
		Test.execute();
		sample1.Test.execute();
		sample1.sample2.Test.execute();
	}
}

同一パッケージに格納されているTestクラス以外はパッケージ名まで指定して処理を呼びだす必要があります。

import文ではどのTestクラスを実行しているのか分からないため、サンプルのような記述法になります。

Test.java(パッケージ指定なし)

public class Test {
	public static void execute() {
		System.out.println("パッケージ指定無しのTestクラスから出力しています。");
	}
}

Test.java(sample1パッケージ)

package sample1;

public class Test {
	public static void execute() {
		System.out.println("sample1パッケージのTestクラスから出力しています。");
	}
}

Test.java(sample2パッケージ)

package sample1.sample2;

public class Test {
	public static void execute() {
		System.out.println("sample2パッケージのTestクラスから出力しています。");
	}
}

出力結果

これらのプログラムを実行すると下記の結果が出力されます。

パッケージ指定無しのTestクラスから出力しています。
sample1パッケージのTestクラスから出力しています。
sample2パッケージのTestクラスから出力しています。

Main.javaクラスでパッケージを指定することにより、任意のパッケージに格納されたTestクラスの処理が実行されていることが確認出来ます。

さいごに: Javaのパッケージを使ってファイル管理を徹底しよう


本記事では、Javaのパッケージについて役割から使い方までをJava初心者向けに解説してきました。

小さなプロジェクトではあまりパッケージを意識することはないかも知れませんが、Java開発者としては抑えておきたい知識の1つです。

今回の情報を参考に、パッケージを使うことで記述方法がどのように変わるのかしっかりと把握しておきましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。