Javaパッケージのガイド
1. 序章
このクイックチュートリアルでは、Javaのパッケージの基本について説明します。 パッケージを作成し、その中に配置したタイプにアクセスする方法を見ていきます。
また、命名規則と、それが基礎となるディレクトリ構造にどのように関連するかについても説明します。
最後に、パッケージ化されたJavaクラスをコンパイルして実行します。
2. Javaパッケージの概要
Javaでは、パッケージを使用して、関連するクラス、インターフェイス、およびサブパッケージをグループ化します。
これを行う主な利点は次のとおりです。
- 関連するタイプを見つけやすくする–パッケージには通常、論理的に関連するタイプが含まれています
- 名前の競合の回避–パッケージは、クラスを一意に識別するのに役立ちます。 たとえば、 com.baeldung.Application、クラスとcom.example.Applicationクラスを使用できます。
- アクセスの制御–パッケージとアクセス修飾子を組み合わせることで、タイプへの可視性とアクセスを制御できます。
次に、Javaパッケージを作成して使用する方法を見てみましょう。
3. パッケージの作成
パッケージを作成するには、ファイルのコードの最初の行としてパッケージステートメントを追加して、パッケージステートメントを使用する必要があります。
com.baeldung.packagesという名前のパッケージに型を配置しましょう。
package com.baeldung.packages;
新しい各型をパッケージに配置することを強くお勧めします。型を定義し、それらをパッケージに配置しない場合、それらはデフォルトまたは名前のないパッケージになります。 デフォルトパッケージを使用すると、いくつかの欠点があります。
- パッケージ構造を持つことの利点を失い、サブパッケージを持つことはできません
- デフォルトパッケージのタイプを他のパッケージからインポートすることはできません
- 保護されたパッケージプライベートアクセススコープは無意味です
Java言語仕様に記載されているように、名前のないパッケージは、主に小規模または一時的なアプリケーションを開発するとき、または開発を開始したばかりのときに便利なように、JavaSEPlatformによって提供されます。
したがって、実際のアプリケーションで名前のないパッケージやデフォルトのパッケージを使用することは避けてください。
3.1. 命名規則
同じ名前のパッケージを避けるために、いくつかの命名規則に従います。
- パッケージの名前はすべて小文字で定義します
- パッケージ名はピリオドで区切られます
- 名前は、それらを作成する会社または組織によっても決定されます。
組織に基づいてパッケージ名を決定するには、通常、会社のURLを逆にすることから始めます。 その後、命名規則は会社によって定義され、部門名とプロジェクト名が含まれる場合があります。
たとえば、 www.baeldung.com からパッケージを作成するには、それを逆にしましょう。
com.baeldung
次に、 com.baeldung.packagesやcom.baeldung.packages.domain。のように、このサブパッケージをさらに定義できます。
3.2. ディレクトリ構造
Javaのパッケージは、ディレクトリ構造に対応しています。
各パッケージとサブパッケージには独自のディレクトリがあります。したがって、パッケージ 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コアクラスを使用して、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
出力は次のようになります。
6. 結論
この短い記事では、パッケージとは何か、なぜそれらを使用する必要があるのかを学びました。
命名規則と、パッケージがディレクトリ構造にどのように関連するかについて説明しました。 また、パッケージを作成して使用する方法も確認しました。
最後に、javacおよびjavaコマンドを使用して、パッケージを使用してアプリケーションをコンパイルおよび実行する方法について説明しました。
完全なサンプルコードは、GitHubでから入手できます。