Javaの基本パッケージノート-8-

Javaの基本パッケージノート-8-

8パッケージ

一般的に、ときという名前のクラス、名前空間から名前が割り当てられます。名前空間は、文の領域を定義します。Javaでは、二つのクラスの同じ名前空間には、同じ名前を使用することはできません。名前空間は、分割の方法を提供するためにこのように、与えられた名前空間を与えるために、各クラスのパッケージ名は一意である必要があります。クラスがパッケージ内に定義されている場合、パッケージの名前は、このように異なるパッケージの名前の衝突と同じ名前のクラスを回避する、各クラスに付加されます。

Javaはあなたが整理したいパッケージ(パッケージ)を使用することができます。援助パッケージは、簡単に独自のコード、コードライブラリを整理し、他の人が提供する独自のコードを別々に管理することができます。

java.langで、java.utilのjava.net、などを含む複数のパケットに分散標準Javaライブラリ。これは、標準のJavaパッケージ階層を持っています。ネストされたディレクトリとしてハードとして、あなたは、ネストされた階層的な組織のパッケージを使用することができます。すべての標準Javaパッケージは、Javaとjavaxのパッケージ階層です。

パッケージを使用する主な理由は、クラス名の一意性を確保することです。2人のプログラマは常にEmployeeクラスを設立した場合。ちょうど異なるパッケージに配置されたこれらのクラスは、それが競合することはありません。実際には、パッケージ名の絶対的な一意性を確保するために、Sunはパッケージのため、および異なるサブパッケージを使用して、別のプロジェクトのための逆順の形で(明らかにユニークである)その会社のインターネットドメイン名を推奨しています。例えば、horstmann.comは、ドメイン名登録の著者の一人です。リバースフォームcom.horstmann。パケットはさらに、com.horstmann.corejavaなどのサブパケットに分割されてもよいです。

コンパイラの観点からは、ネストされたパッケージの間には関係がありません。例えば、何も持つjava.utilパッケージは、パッケージを持つjava.util.jarします。それぞれのクラスの別のセットを持っています

アクションの1つのパッケージ

  • 1.機能的に類似または関連組織クラスまたはインタフェース同じパッケージで、検索するクラスと使いやすいです。
  • 2.同じフォルダとして、パッケージには、ストレージのディレクトリツリーを使用しました。同じパッケージ名のクラスは、異なるパッケージ内のクラスの名前が同時にクラスの同じパッケージ名に2つの異なるクラスを呼び出している間、区別がパッケージ名に追加する必要があり、同じである、異なっています。そのため、パッケージ名は、競合を避けるために。
  • 3.パッケージには、アクセス権を定義し、クラスのパッケージへのアクセス権を持っているクラスのパッケージにアクセスすることができます。

Javaは、このメカニズムは、名前の競合、アクセス制御、検索を提供することを防止し、クラス(クラス)を配置することであるパッケージ(パッケージ)を使用して、インターフェイス、列挙(列挙)などのコメント(注釈)と。

package文の構文は次のとおりです。

package pkg1[.pkg2[.pkg3…]];

例えば、ファイルは、その内容をSomething.java

package net.java.util;
public class Something{
   ...
}

そして、そのパスをしなければならないnet/java/util/Something.javaので、保存されました。アクションパッケージ(パッケージ)は、他のJavaプログラムから呼び出すことがより簡単に保存された別のJavaプログラムを分類することです。

パッケージ(パッケージ)は、これらのタイプのアクセス保護とネームスペース管理機能を提供するために、相互接続型のセット(クラス、インタフェース、列挙、および注釈)として定義することができます。

次のJavaパッケージの一部です:

java.lang-打包基础的类
java.io-包含输入输出功能的函数

開発者は、クラスおよびインタフェースパッケージのセットを所有し、そして自分のパッケージを定義することができます。実際の開発を奨励するには、あなたはクラスの実装を完了すると、関連するクラスをグループ化する他のプログラマがより簡単に関連しているクラス、インターフェイス、列挙型、およびコメントを判断できるように、そして、そうします。

パッケージは非常に他のパッケージの名前との競合を命名することなく、新しい名前空間(名前空間)を作成しますので。容易なアクセス制御を実装し、簡単に関連するクラスを見つけてみましょうするために、パッケージにこのメカニズムを使用してください。

2パッケージを作成します

パッケージを作成し、あなたがこのパッケージのために適切な名前を取る必要があります。ソースファイルは、このパッケージ、インタフェース、列挙または注釈型によって提供される追加のクラスが含まれている場合はその後、パッケージはソースファイルの先頭で宣言する必要があります。

一つだけpackageステートメントを持つことができますパッケージは、各ソースファイルのソースファイルの1行目に宣言する必要があり、各タイプのファイルがそれに適用されます。

いかなるソースファイルがパッケージを宣言しなければ、一つのクラス、関数、列挙、コメントなどで名前パッケージ(名前のパッケージ)内に配置されます。

動物と呼ばれるパッケージを作成した例を見てみましょう。一般的に、クラス名との競合を避けるために、インターフェイスの名前を小文字を使用

パケットインタフェース(インタフェース)に加え動物:

Animal.java 文件代码:
/* 文件名: Animal.java */
package animals;//该文件属于animals包

interface Animal {
   public void eat();
   public void travel();
}

その後、インターフェースは同じパッケージを達成するために追加されます。

//MammalInt.java 文件代码:
package animals;

/* 文件名 : MammalInt.java */
public class MammalInt implements Animal{
   public void eat(){
      System.out.println("Mammal eats");
   }
   public void travel(){
      System.out.println("Mammal travels");
   } 
   public int noOfLegs(){
      return 0;
   }
   public static void main(String args[]){
      MammalInt m = new MammalInt();
      m.eat();
      m.travel();
   }
}

次に、これらの2つのファイルをコンパイルし、動物という名前のサブディレクトリに入れます。次のコマンドで実行します:

$ mkdir animals
$ cp Animal.class  MammalInt.class animals
$ java animals/MammalInt

Mammal eats
Mammal travel

3パックとメンバーへのアクセス

パッケージはまた、アクセス制御機構のJavaに関与している、視界の要素はその説明プライベート、パブリック、保護された、またはデフォルトに依存し、また要素が配置されているパッケージに依存します。したがって、それが属するクラス要素と決定する視認性の関連パッケージの可視性は、このマルチレベルのアクセス制御方法は、次の表の適切な、豊富なアクセスポイントテーブルです。

- プライベートメンバ デフォルトメンバー 保護されたメンバー 公共のメンバー
同じクラスにみます
同じパッケージに位置してみサブクラス N
同じパッケージ内Feiziクラスが表示されます N
異なるパッケージに表示サブクラス N N
可視の異なるパッケージでFeiziクラス N N N

4インポートパッケージ(インポートキーワード)

パッケージのメンバーを使用することができるようにするために、我々は、明示的にJavaプログラムでパッケージをインポートする必要があります。「インポート」ステートメントを使用すると、この機能を実行することができます。

文の後のJavaソースファイルのimport文でパッケージにする必要があり、すべての以前に定義されたクラスは、あなたが、あなたはまた、複数持つことができないことができ、その構文は次のとおりです。

import package1[.package2…].(classname|*);

パッケージの場合は、このパッケージの別のクラスを使用するクラスは、パッケージ名を省略することができます。

以下のパッケージがすでにそのクラスのボス給与パッケージに追加、給与Employeeクラスが含まれています。次のようにボス従業員クラスクラス基準時間は、プレフィックス給与、ボスクラスのインスタンスなしで使用することができます。

//Boss.java 文件代码:
package payroll;
 
public class Boss
{
   public void payEmployee(Employee e)
   {
      e.mailCheck();
   }
}

クラスがない場合にはボス給与パッケージが起こるのだろうか?ボスクラスは、パッケージ内の他のクラスを参照するために、いくつかの方法のいずれかを使用する必要があります。

以下のようなクラス記述の完全な名前を使用します。

payroll.Employee

importキーワードの導入により、「*」ワイルドカードを使用します

import payroll.*;

Employeeクラスを導入importキーワードを使用します。

import payroll.Employee;
注意:

クラスファイルは、輸入申告の任意の数を含めることができます。import宣言は、前packageステートメント、クラス宣言の後でなければなりません。

しかし、それは注意しなければならない、唯一のパッケージをインポートするには、アスタリスク(*)を使用できますが、インポートのJavaを使用することはできません。*またはインポートのjava。*。*すべてのJavaパッケージ接頭辞をインポートします。

ほとんどの場合、パケットだけは、インポートそれらを無視するために必要な、あまりにも多くを持っていません。しかし、名前の競合が発生した場合に、我々はパッケージの名前をメモして失敗することはできません。たとえば、java.utilのとjava.sqlパッケージは、日付(日付)タイプが含まれています。プログラムに導入された2つのパッケージの場合:

import java.util .*;
import java.sql .*;

プログラムはDateクラスを使用すると、コンパイルエラーが発生します。

Date today; // Error java.util .Date or java.sql .Date?

このとき、コンパイラは、Dateクラスを使用しているプログラムを判別することはできません。この問題を解決するために、特定のimport文を増大させるために使用することができます

import java.util .*;
import java.sql .*;
import java.util .Date;

両方の日付クラスを使用する必要がある場合、私たちはどのようにすればよいですか?答えは、各クラス名に加えて、完全なパッケージ名の前にあります。

java.util .Date deadline = new java.util .Date() ;
java.sql .Date today = new java.sql .Date(...) ;

パッケージのクラス・コンパイラ(コンパイラ)の仕事に配置。クラスファイルのバイトコードは確かに他のクラスを参照するために、完全なパッケージ名を使用します。

C ++のコメント:C ++プログラマは、多くの場合の#includeしてインポートを混乱させる。2と共通に少しを持っている間、実際には。C ++では、外部の特性の声明を含める必要がありますプラスに植えられた。C ++コンパイラは、明示的に含まれるヘッダファイル内のファイルとファイルをコンパイルされることに加えて、任意の文書内で見ることができないためです。Javaコンパイラはそれを見に行くためにどこにそれを伝え、他のファイル内で見ることができ
ますが、インポートを使用することはできません、それはjava.util.Dateとして、明示的なパッケージ名で指定され、Javaで;しかし、C ++でincludeディレクティブの使用を避けることはできません。唯一の利点インポート文は簡単です。あなたは、クラスを参照するために完全なパッケージ名の代わりに短い名前を使用することができます。たとえば、*の後に(またはインポートjava.util.Date)ステートメントは、のみインポートjava.utilので日付java.util.Dateクラスを参照することがあります。

C ++では、パッケージ機構ネームスペース(名前空間)に類似しています。Javaの、パッケージおよびC ++の名前空間とディレクティブを使用して同様のimport文で。

パッケージにクラス5

パッケージにクラスに、パッケージ名は、クラスコード前に、パッケージで定義され、ソースファイルの先頭に配置する必要があります。例えば、このような最初Employee.java時:

package com.horstiman.corejava;
public class Employee {
    ...
} 

何のpackageステートメントが存在しない場合は、クラスのソースファイルがでデフォルトのパケット(defaulfパッケージ)に配置されるように、ソースファイルに配置されます。デフォルトのパッケージには、ノーブランドのパッケージです。これに先立ち、当社のすべてのクラスは、デフォルトのパッケージで定義されています。

完全なパッケージ名の文書のパッケージは、サブディレクトリと一致します。たとえば、すべてのソースはcom.horstmann.corejavaパッケージは、サブディレクトリCOM / horstmann / corejava(コム\ horstmannの\のcorejavaでWindowsの場合)に配置する必要がありますファイル。コンパイラのクラスファイルは同じディレクトリ構造に配置されます。

6パッケージのディレクトリ構造

パッケージのクラスは、主に2つの結果を持っています。

  • 我々は先に述べたようにパッケージ名は、クラス名の一部になります。
  • ディレクトリ構造は、バイトコードが一致し、対応するパッケージ名の下に置かなければなりません。

ここでは、ファイルに独自のJavaを管理する簡単な方法は次のとおりです。

クラスの種類、テキストのインターフェイスのソースコードは、このファイルの名前は、このタイプの名前である、とまで.java延長。例えば:

// 文件名 :  Car.java
package vehicle;
public class Car {
   // 类实现  导入包
}

次に、ディレクトリ内のソースファイル、クラス名は、パッケージに対応するディレクトリ。

....\vehicle\Car.java

さて、正しいクラス名とパスは、次のようになります。

クラス名- > vehicle.Carの
パス名- (Windowsシステム内)>車両\ Car.java

一般的に、同社のようなそのパッケージ名にインターネットドメイン名のその逆の形式を使用しています。インターネットのドメイン名がrunoob.comで、すべてのパッケージ名はcom.runoobし始めています。サブディレクトリ名に対応するパケットの各部分。

例えば:あるcom.runoob.testパッケージは、このパッケージには、名前付き含まれているRunoob.javaソースファイルを、サブディレクトリのシリーズを次のようにする必要があり、対応します:...\com\runoob\test\Runoob.java

時間をコンパイル、コンパイラは別の出力ファイルを作成し、出力ファイル名は、このタイプの名前はパッケージで定義された各クラス、インタフェースの一種であり、プラスである.class接尾辞の拡張として。例えば:

// 文件名: Runoob.java
package com.runoob.test;
public class Runoob { 
}
class Google { 
}

今、私たちは、使用-d、次のようにファイルをコンパイルするためのオプションを:

$javac -d . Runoob.java

これは、次のようなコンパイル済みのファイルを配置します。

.\com\runoob\test\Runoob.class
.\com\runoob\test\Google.class

あなたはこのようなすべてをインポートすることができます\com\runoob\test\ので、上のクラス、インタフェース、およびの定義に:

import com.runoob.test.*;

コンパイル後.classのファイルがあるべき.javaソースファイル、彼らはパッケージの対応する名前と一緒にディレクトリに配置する必要があります。しかし、それはする必要はありません.class適切なパスとファイル.javaと同じパスです。あなたは別のソースディレクトリおよびクラスを手配することができます。

<path-one>\sources\com\runoob\test\Runoob.java
<path-two>\classes\com\runoob\test\Google.class

このように、あなたはそれらのソースを開示することなく、他のプログラマにごclassesディレクトリを共有することができます。このようにして、そのソースコードを管理し、クラスファイルは、コンパイラおよびJava仮想マシン(JVM)は、プログラムで使用されるすべてのタイプを見つけることができますせることができます。

ディレクトリの絶対パスは、クラスと呼ばれていますclass pathシステム変数に設定してくださいCLASSPATHに。Javaコンパイラと仮想マシンpackageへの単語class path以降の建設.classファイルのパス。

<path- two>\classeclass pathpackage名前com.runoob.testやコンパイラとJVMがなり<path-two>\classes\com\runoob\testを探し.classファイル。

class pathマルチパスは、区切り文字によって分離されるべきいくつかの経路を含んでいてもよいです。デフォルトでは、コンパイラとJVMは、現在のディレクトリを見つけます。JARファイルには、依存Javaプラットフォームによってクラスが含まれているので、それらのデフォルトディレクトリが置かclass pathに。

7システム変数CLASSPATHを設定します

次のコマンドを使用して、現在のCLASSPATH変数を表示します。

Windows 平台(DOS 命令行下):C:\> set CLASSPATH
UNIX 平台(Bourne shell 下):# echo $CLASSPATH

現在のCLASSPATH変数の内容を削除します。

Windows 平台(DOS 命令行下):C:\> set CLASSPATH=
UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH

CLASSPATH変数を設定します。

Windows 平台(DOS 命令行下): C:\> set CLASSPATH=C:\users\jack\java\classes
UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH

Javaの8 JDKが提供されている基本的なパッケージ

JavaのJDKは、以下を含むいくつかの基本的なパッケージを提供しています。

  • java.langパッケージ:スレッドクラス、例外クラス、クラスのシステム、整数と文字列クラスと他のクラスが含まれて、これらのクラスは、多くの場合、Javaプログラムを作成するために使用されています。このパッケージには、さらに輸入されるjava.langを提供せずに、ある自動的にJava仮想マシンの導入である。*ステートメントは、このパッケージが自動的に導入されます。
  • java.awtパッケージ:抽象ウィンドウツールキットは、このパッケージは、主にクラスと描画クラスのGUIインタフェースを作成するために使用されます
  • そのようなファイル入力ストリームクラス(FileInputStreamのクラス)などの様々な入力および出力ストリームを含む入力/出力パケット、およびファイル出力ストリームクラス(たFileOutputStream)、等:java.ioパッケージ
  • java.utilパッケージ:そのようなクラスの日付やコレクションなど、いくつかのユーティリティクラスを、提供します。
  • java.netパッケージ:ネットワークプログラミングのために使用されているSocketクラスとURLと関連クラスを含む、TCP / IPネットワークプロトコルを提供

おすすめ

転載: www.cnblogs.com/whatsabc/p/11520892.html