1. パッケージ
通常の Java プログラムには膨大な数のクラスが含まれます。幾つか?何千、何万。また、プログラムが他のプログラマによって作成されたクラスを含むさまざまなライブラリを使用しているという事実も考慮に入れると、クラスの数は簡単に数百万単位になるでしょう。
これら数百万、あるいは数千のクラスすべてに一意の名前を付けることは、ほとんど不可能です。
もちろん、A123
や のような名前を想像することはできB345
ますが、クラスを理解しやすくする適切なクラス名 (たとえば、String
文字列など) を選択することについて話している場合、1,000 個の一意の名前を生成するだけでも大変です。仕事の。
このため、Java では、package キーワードを使用してクラスをパッケージにグループ化するのが一般的です。
Java クラスとそのパッケージは、コンピュータ上のファイルやフォルダに非常に似ています。
たとえば、コンピュータに 10 個のドキュメントを保存する必要がある場合、おそらくそれらを 1 つのフォルダに保存するだけでしょう。しかし、何千ものドキュメント (たとえば、会社のすべてのドキュメントのリポジトリ) がある場合はどうなるでしょうか?
何千ものドキュメントを保存する必要がある場合、解決策の 1 つは、わかりやすい名前を付けて複数のレベルのフォルダーを作成することです。そして、最後のレベルのフォルダーに、その特定のフォルダーに関連するドキュメントを保存します。ドキュメントにわかりやすい名前を付けても問題ありません。
実際、これらすべてを Java のクラスに対して行います。
クラスを含むファイルは別のディレクトリ (フォルダー) に保存され、クラスのフォルダーとそのすべてのサブフォルダーの完全な名前がパッケージの名前になります。例:
ファイルへのパス | パッケージ名 | クラス名 |
---|---|---|
|
|
|
|
|
|
|
|
|
フォルダー名とは異なり、パッケージ名では区切り文字としてドットが使用されます。つまり、フォルダーがパッケージ\com\codegym\tasks\
に相当しますcom.codegym.tasks
。
2.src
フォルダー
Java では、プログラムのすべてのクラスを 1 つのフォルダー (およびサブフォルダー) に保存するのが一般的です。このフォルダーは通常src
( sourceの略) と呼ばれます。
このフォルダーはプロジェクト ルート (またはソース ルート) と呼ばれ、すべてのパッケージ パスはそれに対する相対パスになります。例:
フォルダー | パッケージ名 |
---|---|
|
|
|
|
この状況では、プログラマーは、「フォルダー内に という名前のプロジェクトがありmy
ます」または「フォルダー内に というc:\projects\data
名前のプロジェクトがあります」などと言います。project
d:\files\git\data
クラスはルート フォルダー ( ) に直接置くのではなく、常にパッケージ内に置くのが最善ですsrc
。クラスが数個しかない場合、これは問題になりません。しかし、クラスが多数ある場合、非常に混乱しやすくなります。 、クラスは常にパッケージ内でのみ作成してください。
Java では、クラスやパッケージに意味のある名前を付けるのが通例です。多くの企業は独自のライブラリ (クラスのセット) をリリースしており、混乱を避けるために、パッケージ名に企業/Web サイト/プロジェクトの名前を組み込んでいます。
パッケージ名 | 会社名・プロジェクト名 |
---|---|
|
アパッチプロジェクト |
|
オラクル社 |
|
オラクル社、Javaプロジェクト |
|
IBM社、WebSphereプロジェクト |
|
JBossプロジェクト |
3. ファイルの内容
Java 言語標準によれば、クラス名とそのパッケージの名前に関する情報がコードを含むファイルに含まれている必要があります。一般的な形式を以下に示します。
package package-name;
public class ClassName
{
}
パッケージ名はフォルダー名と一致し、ファイル名はパブリック クラス名と一致する必要があります。
ファイルがある場合は、次のものが含まれている必要があります。...\src\com\project\Service.java
package com.project;
public class Service
{
}
4. クラスのインポート
クラス名とパッケージ名は、いわゆるクラスの完全修飾名を形成します。
例:
完全修飾名 | パッケージ名 | クラス名 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
なし |
|
良いニュース:
完全修飾クラス名はプロジェクト内で常に一意です。結局のところ、1 つのフォルダー内に同じ名前の 2 つのファイルを作成することはできません。
悪いニュース:
完全修飾クラス名は通常、長いか非常に長いです。また、コード内で毎回長い名前 (java.util.ArrayList など) を書き出すのは非常に不便です。
そのため、Java にはクラスをインポートする機能が追加されました。
コード内でクラスの短縮名を使用できますが、最初に、どの完全修飾クラス名がその短縮名に対応するかをコンパイラーに知らせる必要があります。プロジェクト内に同じ名前のクラスが複数ある場合はどうなるでしょうか? または、もともと 1 つあったのに、さらに 15 個追加されました...
コードで短いクラス名を使用するには、次の構成を追加する必要があります。
import fully-qualified-class-name;
この宣言は、クラスの先頭、package
宣言の直後に追加する必要があります。
例:
package com.codegym.tasks.task01;
import java.util.Scanner;
import com.test.helper.special.ArrayList;
public class Solution
{
public static void main(String[] args)
{
Scanner console = new Scanner(System.in);
ArrayList list = new ArrayList();
}
}
2 つのクラス (と)をインポートしたので、コード内でそれらの短縮名を使用できます。そして、コンパイラはどのクラスを使用するかを認識します。java.util.Scanner
com.test.helper.special.ArrayList
を使用しなかった場合、同じコードは次のようになりますimport
。
package com.codegym.tasks.task01;
public class Solution
{
public static void main(String[] args)
{
java.util.Scanner console = new java.util.Scanner(System.in);
com.test.helper.special.ArrayList list = new com.test.helper.special.ArrayList();
}
}
ちなみに、プロジェクトに という名前の 2 つのクラスがある場合Scanner
、両方を同じファイルにインポートすることはできません。一方のクラスには長い名前を使用する必要があります。
あなたのチームにジェンがいるとします。誰もが彼女が誰であるかを知っているので、コミュニケーションの問題はありません。ただし、Jens が 3 つある場合は、それらを区別するために完全修飾名を使用する必要があります。
ちなみに、クラスにインポート ステートメントをたくさん追加するのが面倒な場合は、その遅延バージョンを使用できます。特定のクラス名の代わりにアスタリスクを入力します。
import package-name.*;
これにより、パッケージ内のすべてのクラスの短縮名を使用できるようになります。
パッケージ内のすべてのクラスは自動的にインポートされるため、それらに対するステートメントjava.lang
を作成する必要はありません。import
次のクラスのいずれかをすでに知っているはずですjava.lang.String
。はい、そうです。これはString
文字列を操作するために使用したクラスです。
GO TO FULL VERSION