内容はタイトルの通り"package"
eclipseでは新規プロジェクトを作成する時に作成してる感じですね。
なぜ作成するのかはこの記事を書くまで全然気にしていませんでした。
##そもそもなぜpackageを作成するの?
タイトルの通りですが、クラスファイル群を整理する仕組み=フォルダリング
調べた要約がこんな感じでした。
クラス名が世界で一つしか使えなかったら不便ですから、各種クラスファイルはフォルダで仕分けて管理する仕組みという事らしいです。
eclipseを使用せずpackageを作成してみる事にします。
今回作成したプロジェクトはこんな感じです。
ドキュメント
├──workspase/
├──hallojavaworld/
├──Hellojava.java
このプロジェクトにpackageを作成します。
配置ディレクトリはこんな感じになります
jp\ac\hello\Hellojava.class
完全修飾クラス名
jp.ac.hello.Hellojava
※完全修飾クラスについては説明をはぶきます。プログラムで利用するという認識で大丈夫だと思います。
完全修飾クラス名中の「ピリオド(.)」は、ディレクトリ区切りを意味するらしいです。
次にHellojava.javaに記述以下の内容を記述しておきます。
package jp.ac.hello; //←ここでパッケージ名(フォルダ階層)を記述
class Hellojava{
public static void main (String[] args){
System.out.println("Hello java Wlorld!)";
}
}
コンパイルはできてますが、実行は"エラー: メイン・クラスHellojavaが見つからなかったかロードできませんでした"と怒られてしまいました。
どうやらパッケージ自体は自分で作成しないといけないみたいですね…
ここで便利なjavaコンパイラオプションの「-d」を使用します。
-d パッケージ階層のディレクトリを自動生成してくれます。
javac -d .\ Hellojava.java
コンパイルすると以下のようになります。
ドキュメント
├──workspase/
├──hallojavaworld/
├──Hellojava.java
├──jp/
├──ac/
├──Hellojava.class
Hellojava.classがパッケージで宣言された通り(jp/ac/hello)の中に生成されました。
##蛇足
package名の付け方もあるらしくWikiを引用したのがこんな感じです。
パッケージ名は組織のトップレベルドメイン名と、そのときの組織のドメインといくつかのサブドメインリストが逆順になったもので始まることが推奨されている。
組織はそれらの名前にそのときに特定の名前を選ぶ。パッケージ名は可能ならばすべて小文字にすべきである。
packageについてはすごくまとめるのが難しく、大切な事を言い忘れてる可能性があったらすみません。
編集