Javaパッケージガイド
1.はじめに
このクイックチュートリアルでは、Javaのパッケージの基本について説明します。
パッケージを作成し、その中に配置されている型にアクセスする方法を説明します。
命名規則と、それが基礎となるディレクトリ構造とどのように関連するかについても説明します。
最後に、パッケージ化されたJavaクラスをコンパイルして実行します。
2. Javaパッケージの概要
Javaでは、パッケージを使用して、関連するクラス、インタフェース、およびサブパッケージをグループ化します。
これを行うことの主な利点は以下のとおりです。
-
関連する型を見つけやすくする – パッケージは通常型を含む
論理的に関連している
** 名前の衝突を避ける – パッケージは私たちが独自にするのを助けるでしょう
クラスを識別するたとえば、
com.baeldung.Application、
、および
com.example.Application
クラス
** アクセス制御 – 可視性とタイプへのアクセスを制御することができます。
パッケージとhttps://www.baeldung.com/java-access-modifiers[access modifiers]の組み合わせ
次に、Javaパッケージを作成して使用する方法を見てみましょう。
3.パッケージを作成する
パッケージを作成するには、**
package
ステートメントをファイルのコードの最初の行として追加して使用する必要があります。
__com.baeldung.packagesという名前のパッケージに型を入れましょう。
package com.baeldung.packages;
-
型を定義してそれらをパッケージに入れない場合、それらは
default
または名前なしのパッケージに入れられます。これでは、パッケージ構造を使用する利点がなくなり、他のパッケージからこれらのタイプにアクセスすることはできなくなります。
3.1. 命名規則
同じ名前のパッケージを避けるために、いくつかの命名規則に従います。
-
パッケージ名はすべて小文字で定義します**
-
パッケージ名はピリオドで区切られています
-
名前は** 作成する会社または組織によっても決定されます。
それら**
組織に基づいてパッケージ名を決定するには、通常、会社のURLを逆にすることから始めます。その後、命名規則は会社によって定義され、部門名とプロジェクト名を含めることができます。
たとえば、
www.baeldung.com
からパッケージを作成するには、逆にします。
com.baeldung
その後、
com.baeldung.packages
や
com.baeldung.packages.domain.
のように、これのサブパッケージをさらに定義できます。
3.2. ディレクトリ構造
Javaのパッケージはディレクトリ構造に対応しています。
-
それぞれのパッケージとサブパッケージはそれ自身のディレクトリを持っています** だから、
com.baeldung.packages
パッケージのために、我々は
com – > baeldung – > packages
のディレクトリ構造を持つべきです。
ほとんどのIDEは、パッケージ名に基づいてこのディレクトリ構造を作成するのに役立ちますので、手動で作成する必要はありません。
4.パッケージメンバーの使い方
domain
という名前のサブパッケージにクラス
TodoItem
を定義することから始めましょう。
package com.baeldung.packages.domain;
public class TodoItem {
private Long id;
private String description;
//standard getters and setters
}
4.1. 輸入
別のパッケージのクラスから
TodoItem
クラスを使用するには、それをインポートする必要があります。インポートされたら、名前でアクセスできます。
パッケージから単一の型をインポートすることも、アスタリスクを使用してパッケージ内のすべての型をインポートすることもできます。
domain
サブパッケージ全体をインポートしましょう。
import com.baeldung.packages.domain.** ;
それでは、
TodoItem
クラスだけをインポートしましょう。
import com.baeldung.packages.domain.TodoItem;
JDKやその他のJavaライブラリにも独自のパッケージが付属しています。プロジェクトで使用したい既存のクラスを同じ方法でインポートできます。
たとえば、Javaコアの
List
インターフェースと
ArrayList
クラスをインポートしましょう。
import java.util.ArrayList;
import java.util.List;
-
その後、単純にそれらの名前を使用することによって、アプリケーションでこれらの型を使用できます。
public class TodoList {
private List<TodoItem> todoItems;
public void addTodoItem(TodoItem todoItem) {
if (todoItems == null) {
todoItems = new ArrayList<TodoItem>();
}
todoItems.add(todoItem);
}
}
ここでは、新しいクラスとJavaコアクラスを使用して、
List
of
ToDoItems.
を作成しました。
4.2. 完全修飾名
時には、異なるパッケージから同じ名前の2つのクラスを使っているかもしれません。たとえば、
java.sql.Date
と
java.util.Date
の両方を使用しているとします。 ** 名前の衝突が発生した場合は、少なくとも1つのクラスに完全修飾クラス名を使用する必要があります。
完全修飾名で
TodoItem
を使用しましょう。
public class TodoList {
private List<com.baeldung.packages.domain.TodoItem> todoItems;
public void addTodoItem(com.baeldung.packages.domain.TodoItem todoItem) {
if (todoItems == null) {
todoItems = new ArrayList<com.baeldung.packages.domain.TodoItem>();
}
todoItems.add(todoItem);
}
//standard getters and setters
}
5.
javac
でコンパイルする
パッケージ化されたクラスをコンパイルする時が来たら、ディレクトリ構造を覚えておく必要があります。ソースフォルダから始めて、ファイルの場所を
javac
に指示する必要があります。
TodoList
クラスはそれに依存しているため、最初に
TodoItem
クラスをコンパイルする必要があります。
まずはコマンドラインやターミナルを開いてソースディレクトリに移動しましょう。
それでは、
com.baeldung.packages.domain.TodoItem
クラスをコンパイルしましょう。
> javac com/baeldung/packages/domain/TodoItem.java
クラスが正しくコンパイルされた場合、エラーメッセージは表示されず、
TodoItem.class
ファイルが
com/baeldung/packages/domain
ディレクトリに表示されます。
他のパッケージの型を参照する型の場合は、
-classpath
フラグを使用して
javac
コマンドに他のコンパイル済みクラスの場所を指示する必要があります。
TodoItem
クラスがコンパイルされたので、
TodoList
クラスと
TodoApp
クラスをコンパイルできます。
>javac -classpath . com/baeldung/packages/** .java
繰り返しますが、エラーメッセージは表示されず、
com/baeldung/packages
ディレクトリに2つのクラスファイルがあります。
TodoApp
クラスの完全修飾名を使用してアプリケーションを実行しましょう。
>java com.baeldung.packages.TodoApp
出力は次のようになります。https://www.baeldung.com/uploads/java
packages
output.jpg[]
6.まとめ
この短い記事では、パッケージとは何か、そしてなぜそれらを使うべきかを学びました。
命名規則と、パッケージとディレクトリ構造との関係について説明しました。パッケージの作成方法と使い方も見ました。
最後に、
javac
および
java
コマンドを使用して、パッケージを使用してアプリケーションをコンパイルおよび実行する方法について説明しました。
完全なサンプルコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-lang[over on GitHub]にあります。