LoginSignup
5
7

More than 5 years have passed since last update.

クラスファイル群を整理するためにはpackage!

Last updated at Posted at 2016-11-09

内容はタイトルの通り"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!)";
    }
}

コンパイルをしてプログラムを実行してみましょう!
test4.png

コンパイルはできてますが、実行は"エラー: メイン・クラスHellojavaが見つからなかったかロードできませんでした"と怒られてしまいました。

どうやらパッケージ自体は自分で作成しないといけないみたいですね…
ここで便利なjavaコンパイラオプションの「-d」を使用します。

-d パッケージ階層のディレクトリを自動生成してくれます。

javac -d .\ Hellojava.java

コンパイルすると以下のようになります。

ドキュメント
    ├──workspase/
        ├──hallojavaworld/
            ├──Hellojava.java
            ├──jp/
                ├──ac/
                    ├──Hellojava.class

Hellojava.classがパッケージで宣言された通り(jp/ac/hello)の中に生成されました。

蛇足

package名の付け方もあるらしくWikiを引用したのがこんな感じです。

パッケージ名は組織のトップレベルドメイン名と、そのときの組織のドメインといくつかのサブドメインリストが逆順になったもので始まることが推奨されている。
組織はそれらの名前にそのときに特定の名前を選ぶ。パッケージ名は可能ならばすべて小文字にすべきである。

packageについてはすごくまとめるのが難しく、大切な事を言い忘れてる可能性があったらすみません。

編集

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7