Javaパッケージのガイド
1. 前書き
このクイックチュートリアルでは、Javaのパッケージの基本について説明します。 パッケージを作成し、パッケージ内に配置したタイプにアクセスする方法を説明します。
また、命名規則と、それが基になるディレクトリ構造にどのように関連するかについても説明します。
最後に、パッケージ化されたJavaクラスをコンパイルして実行します。
2. Javaパッケージの概要
Javaでは、use packages to group related classes, interfaces and sub-packagesです。
これを行う主な利点は次のとおりです。
-
関連するタイプを見つけやすくする-通常、パッケージには論理的に関連するタイプが含まれます
-
名前の競合の回避–パッケージは、クラスを一意に識別するのに役立ちます。たとえば、com.example.Application,クラスとcom.example.Applicationクラスを設定できます。
-
アクセスの制御–パッケージとaccess modifiersを組み合わせることで、タイプへの可視性とアクセスを制御できます
次に、Javaパッケージを作成して使用する方法を見てみましょう。
3. パッケージを作成する
パッケージを作成するには、we have to use the package statement by adding it as the very first line of code in a file。
com.example.packages:という名前のパッケージに型を配置しましょう
package com.example.packages;
It’s highly recommended to add each new type in a package.タイプを定義し、それらをパッケージに配置しない場合、それらはdefaultまたは名前のないパッケージに入れられます。 これでは、パッケージ構造を使用する利点が失われ、他のパッケージからこれらのタイプにアクセスすることはなくなります。
3.1. 命名規則
同じ名前のパッケージを避けるために、いくつかの命名規則に従います。
-
パッケージnames in all lower caseを定義します
-
パッケージ名はピリオドで区切られています
-
名前もthe company or organization that creates themによって決定されます
組織に基づいてパッケージ名を決定するには、通常、会社のURLを逆にすることから始めます。 その後、命名規則は会社によって定義され、部門名とプロジェクト名を含めることができます。
たとえば、www.example.comからパッケージを作成するには、それを逆にしましょう。
com.example
次に、com.example.packagesやcom.example.packages.domain.など、このサブパッケージをさらに定義できます。
3.2. ディレクトリ構造
Javaのパッケージは、ディレクトリ構造に対応しています。
Each package and subpackage has its own directory.したがって、パッケージcom.example.packagesの場合、com → example → packagesのディレクトリ構造が必要です。
ほとんどのIDEは、パッケージ名に基づいてこのディレクトリ構造を作成するのに役立つため、これらを手動で作成する必要はありません。
4. パッケージメンバーの使用
domainという名前のサブパッケージでクラスTodoItemを定義することから始めましょう。
package com.example.packages.domain;
public class TodoItem {
private Long id;
private String description;
// standard getters and setters
}
4.1. 輸入
別のパッケージのクラスからTodoItemクラスを使用するには、それをインポートする必要があります。 インポートすると、名前でアクセスできるようになります。
パッケージから単一のタイプをインポートすることも、アスタリスクを使用してパッケージ内のすべてのタイプをインポートすることもできます。
domainサブパッケージ全体をインポートしましょう:
import com.example.packages.domain.*;
それでは、TodoItemクラスのみをインポートしましょう。
import com.example.packages.domain.TodoItem;
JDKおよびその他のJavaライブラリにも独自のパッケージが付属しています。 We can import pre-existing classes that we want to use in our project in the same manner.
たとえば、JavaコアのListインターフェースとArrayListクラスをインポートしましょう。
import java.util.ArrayList;import java.util.List;
これらのタイプは、名前を使用するだけでアプリケーションで使用できます。
public class TodoList {
private List todoItems;
public void addTodoItem(TodoItem todoItem) {
if (todoItems == null) {
todoItems = new ArrayList();
}
todoItems.add(todoItem);
}
}
ここでは、新しいクラスとJavaコアクラスを使用して、ToDoItems.のListを作成しました。
4.2. 完全修飾名
時には、異なるパッケージから同じ名前の2つのクラスを使用している場合があります。 たとえば、java.sql.Dateとjava.util.Dateの両方を使用している場合があります。 When we run into naming conflicts, we need to use a fully qualified class name for at least one of the classes.
完全修飾名でTodoItemを使用しましょう:
public class TodoList {
private List todoItems;
public void addTodoItem(com.example.packages.domain.TodoItem todoItem) {
if (todoItems == null) {
todoItems = new ArrayList();
}todoItems.add(todoItem);
}
// standard getters and setters
}
5. javacでコンパイル
パッケージ化されたクラスをコンパイルするときは、ディレクトリ構造を覚えておく必要があります。 ソースフォルダから始めて、ファイルの場所をjavacに指示する必要があります。
TodoListクラスはそれに依存しているため、最初にTodoItemクラスをコンパイルする必要があります。
コマンドラインまたはターミナルを開いて、ソースディレクトリに移動することから始めましょう。
それでは、com.example.packages.domain.TodoItemクラスをコンパイルしましょう。
> javac com/example/packages/domain/TodoItem.java
クラスが正常にコンパイルされた場合、エラーメッセージは表示されず、ファイルTodoItem.classがcom/example/packages/domainディレクトリに表示されます。
他のパッケージの型を参照する型の場合、-classpathフラグを使用して、他のコンパイル済みクラスの場所をjavacコマンドに指示する必要があります。
TodoItemクラスがコンパイルされたので、TodoListクラスとTodoAppクラスをコンパイルできます。
>javac -classpath . com/example/packages/*.java
ここでも、エラーメッセージは表示されず、com/example/packagesディレクトリに2つのクラスファイルがあります。
TodoAppクラスの完全修飾名を使用してアプリケーションを実行してみましょう。
>java com.example.packages.TodoApp
出力は次のようになります。
6. 結論
この短い記事では、パッケージとは何か、なぜパッケージを使用する必要があるのかを学びました。
命名規則と、パッケージとディレクトリ構造の関係について説明しました。 パッケージの作成方法と使用方法も確認しました。
最後に、javacおよびjavaコマンドを使用して、パッケージを使用してアプリケーションをコンパイルおよび実行する方法について説明しました。
完全なサンプルコードはover on GitHubで入手できます。