パッケージの宣言の方法がいまいちわからない…
パッケージ名を取得するにはどうすればいいの?
こんにちは!フリーランスの長野です。Javaはソースコードを書くだけでは実行することはできません。
環境変数を設定したり、コンパイルする必要があります。また、1つのプログラムで複数のクラスが別々のフォルダに作成されている場合、パッケージ(package)を宣言する必要があります。
この記事では、そんなJavaのパッケージについて、以下の内容で解説していきます。
- そもそもパッケージとは
- パッケージの命名規則や宣言・実行方法
- パッケージ名を取得する方法
今回はJavaのパッケージについて、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
Javaにおけるパッケージ(package)とは
パッケージ(package)はクラスやインターフェースをグループ化して分ける仕組みです。
Javaでプログラミングをするとたくさんのクラスを作ることはよくあります。たくさんのクラスを作ると同じクラス名を付けることはできません。
しかし、グループ化して分けてさえいれば、同じクラス名を付けていても問題は発生しなくなります。また、同じ機能や関連するクラスをグループ化して分けていることで、クラスも検索し易くなり修正や改良する際に探す手間も省くことができます。
パッケージの命名規則とは
クラスやインターフェースはフォルダでグループ分けします。
例えば、
この場合、パッケージ名は
第1階層フォルダ名.第2階層フォルダ名.第3階層フォルダ名
というように「.」(ピリオド)を使って第1階層から順にフォルダ名を連結してパッケージ名を付けます。また、フォルダ名は小文字が推奨されています。
パッケージを宣言する方法
それではサンプルコードでパッケージの宣言についてみていきましょう。
lang/java/hello/HelloJava.java:
package lang.java.hello; public class HelloJava { public HelloJava() { System.out.println("Hello Java!"); } }
lang/cpp/hello/HelloCpp.java:
package lang.cpp.hello; public class HelloCpp { public HelloCpp() { System.out.println("Hello C++!"); } }
パッケージの宣言のポイントは以下のようになります。
- packageはJavaファイルの先頭に記述します。
- 最上位階層のフォルダ名から順に「.」(ピリオド)を使って連結します。
- パッケージ名の後には「;」(セミコロン)を記述します。
パッケージをimportする方法
それでは、先ほどのクラスのサンプルコードをmainメソッド内で使用します。
import lang.cpp.hello.HelloCpp; import lang.java.hello.HelloJava; public class Main { public static void main(String[] args) { HelloJava hello1 = new HelloJava(); HelloCpp hello2 = new HelloCpp(); } }
packageで宣言したクラスを使うにはimportを用いて、最上位階層のフォルダ名から順に「.」(ピリオド)を使って連結し最後に使用するクラス名を記述します。
importの宣言の後には「;」(セミコロン)を記述します。
コンパイル、実行する方法
コンパイル、実行するにはjavac、javaコマンドを使用します。
mainメソッドを含むクラスでimportしている場合はクラスパスを設定する必要はありません。ただし、この場合はソースコードと同じフォルダにclassファイルが生成されます。
ソースコードとclassファイルが混在してゴチャゴチャしてしまいます。ソースコードとclassファイルを混在させずに、分けたい場合はjavacコマンドで-dオプションを使います。
例えば下記のとおりです。
javac -classpath .;langjavahello;langcpphello -d ..bin Main.java
こうすることで、binフォルダ以下はsrcフォルダ以下の構成と全く同じ構成でclassファイルだけが生成されるようになります。クラスパスの設定については、こちらで詳しく解説していますので、ぜひ参考にしてください。
パッケージ名を取得する方法
Javaのプログラムでパッケージ名を取得する方法についてご紹介します。
lang/java/pkgname/GetMyPkgJava.java:
package lang.java.pkgname; public class GetMyPkgJava { public GetMyPkgJava() { System.out.println(GetMyPkgJava.class.getPackageName()); } }
lang/cpp/pkgname/GetMyPkgCpp.java
package lang.cpp.pkgname; public class GetMyPkgCpp { public GetMyPkgCpp() { System.out.println(GetMyPkgCpp.class.getPackageName()); } }
Main.java:
import lang.cpp.pkgname.GetMyPkgCpp; import lang.java.pkgname.GetMyPkgJava; public class Main { public static void main(String[] args) { GetMyPkgJava pName1 = new GetMyPkgJava(); GetMyPkgCpp pName2 = new GetMyPkgCpp(); } }
実行結果:
lang.java.pkgname lang.cpp.pkgname
まとめ
今回はJavaのパッケージについて解説してきましたが、いかがでしたか?Javaではプログラミングをする際にたくさんのクラスを作成します。
たくさんのクラスはフォルダごとに整理されていると、後々の修正や改良する際に探す手間が省けます。クラスをフォルダごとに分けて保存すると、packageを宣言することでimportして利用することができます。
使いこなすことができるように、この記事を何度も参考にして下さいね!