10.内部クラス、ソース・ファイル・ルールおよびパッケージ
6359 ワード
1.内部クラス
Java内部クラスとJavaで内部クラスを使用する理由を参照してください.
内部クラスの2つの役割:
new B.C();
,
B b = new B();
B.C c = b.new C();
クラスをよりよく組織するために、Javaはクラス名のネーミングスペースを区別するためのパッケージメカニズムを提供します.
3.1パッケージの役割
パッケージ文の構文形式は次のとおりです.
package pkg1[.pkg2[.pkg3…]];
たとえば、Something.javaファイルの内容package net.java.util
public class Something{
...
}
では、そのパスはnet/java/util/Something.javaのように保存されているはずです.パッケージ(パッケージ)の役割は、異なるjavaプログラムを分類して保存し、他のjavaプログラムに呼び出されやすくすることです.パッケージ(package)は、クラス、インタフェース、列挙、注釈のグループとして定義され、これらのタイプにアクセス保護とネーミングスペース管理の機能を提供します.
以下はJavaのパッケージです.
java.lang-
java.io-
開発者は,クラスやインタフェースのセットなどを自分でパッケージ化し,自分のパッケージを定義することができる.また、実際の開発では、クラスの実装を自分で完了した後、関連するクラスをグループ化することで、他のプログラマがどのクラス、インタフェース、列挙、注釈などが関連しているかを容易に特定することができます.パケットは新しいネーミングスペース(namespace)を作成するため、他のパケットの名前と名前の競合は発生しません.パッケージというメカニズムを使用すると、アクセス制御が容易になり、関連クラスの位置決めが簡単になります.
3.2パッケージの作成
パッケージを作成するときは、このパッケージに適切な名前を付ける必要があります.その後、他のソースファイルにこのパッケージが提供するクラス、インタフェース、列挙、またはコメントタイプが含まれている場合は、このパッケージの宣言をソースファイルの先頭に置く必要があります.
パッケージ宣言はソースファイルの最初の行にある必要があります.各ソースファイルにはパッケージ宣言が1つしかありません.このファイルの各タイプが適用されます.
ソースファイルにパケット宣言が使用されていない場合、クラス、関数、列挙、注釈などは無名のパケットに格納されます.
3.3 importキーワード
パッケージのメンバーを使用できるようにするには、Javaプログラムにパッケージを明確にインポートする必要があります.この機能を完了するには、import文を使用します.
Javaソースファイルのimport文はpackage文の後にある必要があります.すべてのクラスの定義の前に、なくてもよいし、複数あってもよいし、構文フォーマットは次のとおりです.
import package1[.package2…].(classname|*);
1つのパッケージで、1つのクラスが本パッケージの別のクラスを使用する場合は、パッケージ名を省略できます.例:次のpayrollパッケージにはすでにEmployeeクラスが含まれており、次にpayrollパッケージにBossクラスを追加します.BossクラスがEmployeeクラスを参照する場合はpayroll接頭辞を使用しなくてもよいが、Bossクラスの例は以下の通りである.
package payroll;
public class Boss
{
public void payEmployee(Employee e)
{
e.mailCheck();
}
}
もしボスクラスがpayrollパッケージに含まれていなかったらどうなりますか?Bossクラスは、次の方法のいずれかを使用して、他のパッケージのクラスを参照する必要があります.payroll.Employee
import payroll.*;
import payroll.Employee;
3.4パッケージのディレクトリ構造
クラスをパッケージに配置すると、2つの主要な結果が得られます.
// : Car.java
package vehicle;
public class Car {
//
}
....\vehicle\Car.java
-> vehicle.Car
-> vehicle\Car.java ( windows )
通常、ある会社はインターネットドメイン名の逆形式をパッケージ名として使用します.例えば、インターネットドメイン名はrimi.comで、すべてのパッケージ名はcom.rimiで始まります.パッケージ名の各セクションは、サブディレクトリに対応します.
たとえば、JavaBasic.javaというソースファイルを含むcom.rimi.testのパッケージがあります.それに対応して、次のサブディレクトリの一連があります.
....\com\rimi\test\JavaBasic.java
コンパイルするとき、コンパイラはパッケージで定義されたクラス、インタフェースなどのタイプごとに異なる出力ファイルを作成し、出力ファイルの名前はこのタイプの名前であり、拡張接尾辞として.classを付けます.例:// : JavaBasic.java
package com.rimi.test;
public class JavaBasic {
}
class Google {
}
次に、-dオプションを使用してこのファイルをコンパイルします.$javac -d . JavaBasic.java
コンパイルされたファイルは、次のように配置されます..\com\rimi\test\JavaBasic.class
.\com\rimi\test\Google.class
以下のように、すべてのcomrimitestで定義されているクラス、インタフェースなどをインポートできます.import com.rimi.test.*;
コンパイル後の.classファイルは.javaソースファイルと同様に、それらが配置されたディレクトリはパッケージの名前に対応する必要があります.ただし、.classファイルのパスは、対応する.javaのパスと同じである必要はありません.ソースコードとクラスのディレクトリを別々に手配することができます.\sources\com\rimi\test\JavaBasic.java
\classes\com\rimi\test\Google.class
これにより、自分のソースコードを明らかにすることなく、クラスディレクトリを他のプログラマーに共有することができます.この方法でソースコードとクラスファイルを管理すると、コンパイラとjava仮想マシン(JVM)がプログラムで使用しているすべてのタイプを見つけることができます.クラスディレクトリの絶対パスをclass pathと言います.システム変数CLASSSPATHに設定します.コンパイラとjava仮想マシンは、package名をclass pathに追加することによって.classファイルのパスを構築します.
classesはclass path、packageの名前はcom.rimi.test、コンパイラとJVMはclassescomrimitestで.classファイルを探します.
1つのclass pathにはいくつかのパスが含まれている可能性があります.マルチパスはセパレータで区切らなければなりません.デフォルトでは、コンパイラとJVMは現在のディレクトリを検索します.JARファイルはJavaプラットフォームに関連するクラスが含まれているため、ディレクトリはclass pathにデフォルト設定されています.
3.5 CLASSSPATHシステム変数の設定
現在のCLASSSPATH変数を次のコマンドで表示します.