(参考書:Java2実践チュートリアル第5版)
1つ、内部クラス
Javaは、別のクラスのクラスの定義をサポートしています。このようなクラスは内部クラスと呼ばれ、内部クラスに含まれるクラスは内部クラスの外部クラスと呼ばれます。内部クラスと外部埋め込みクラスの関係は次のとおりです。
- 外部クラスのメンバー変数は内部クラスでも引き続き有効であり、内部クラスのメソッドは外部クラスのメソッドを呼び出すこともできます。
- クラス変数とクラスメソッド(静的)は、内部クラスの本体で宣言することはできません。外部クラスは、内部クラスを使用して、オブジェクトを外部クラスのメンバーとして宣言できます。
- 内部クラスはその外部クラスによってのみ使用され、他のクラスは特定のクラスの内部クラスを使用してオブジェクトを宣言することはできません
Javaコンパイラによって生成される内部クラスのバイトコードファイルは通常のクラス(class name.class)とは異なりますが、外部クラス名$ internal class name.classに
は内部クラスのみがあり、静的クラスとして変更できます。プログラムは静的内部クラスを使用して、他のクラスにオブジェクトを作成できます。静的内部クラスは、外部埋め込みクラスのインスタンスメンバー変数を操作できません。
2つの匿名クラス
Javaでは、クラスのサブクラスのクラス本体を使用して、サブクラスオブジェクトを直接作成できます。これは、親クラスの構築メソッドに加えて、サブクラスオブジェクトを作成できるクラス本体もあることを意味します。このクラス本体は、クラス宣言のないサブクラスと見なされ、匿名クラスと呼ばれます。匿名クラスはサブクラスです。名前がないため、匿名クラスを使用してオブジェクトを宣言することはできませんが、オブジェクトを直接作成することはできます。以下は、匿名クラスでオブジェクトを作成することです。
new 父类名() {
匿名类的类体
};
匿名クラスによって作成されたオブジェクトは、コードを簡略化するためのメソッドパラメーターとして上位の変換オブジェクトとしてのみ使用できます。
(1)匿名クラスの特徴
- 匿名クラスは、親クラスのメソッドを継承することも、親クラスのメソッドをオーバーライドすることもできます。
- 匿名クラスを使用する場合は、特定のクラスでオブジェクトを作成するために直接使用する必要があるため、匿名クラスは内部クラスである必要があります。
- 匿名クラスは外部クラスのメンバー変数とメソッドにアクセスでき、静的メンバー変数とメソッドは匿名クラスのクラス本体で宣言できません。
- 匿名クラスはサブクラスですが、クラス名がないため、匿名クラスでオブジェクトを作成する場合は、親クラスの構築メソッドを直接使用する必要があります。
(2)匿名クラスの役割
サブクラス型のパラメータをメソッドに渡したいユーザーは、メソッドのパラメータテーブルに直接作成された匿名クラスのオブジェクトを使用します。
(3)インターフェースに関連する匿名クラス
Javaでは、インターフェース名とクラス本体を使用して匿名オブジェクトを直接作成することもできます。このクラス本体は、クラス宣言なしでインターフェイスを実装するクラス本体と見なされます。クラス本体は、インターフェース内のすべてのメソッドをオーバーライドする必要があります。次のように:
new 接口名() {
实现接口的匿名类的类体
};
3、異常なクラス
Javaはthrow关键字
、Exceptionサブクラスをスローするオブジェクトを使用して、例外が発生したことを示します。
(1)try-catchステートメント
Javaはtry-catchステートメントを使用して例外を処理し、try-catchステートメントのtry部分に異常な操作を配置します。tryが例外オブジェクトをスローするか、例外オブジェクトをスローする可能性のあるメソッドを呼び出すと(そして、メソッドは例外オブジェクトをスローします)、その後、try部分は(tryブロックの外で)実行をすぐに停止し、catch部分を実行します。トライキャッチは、複数のキャッチで構成できます。
try {
可能发生异常的语句
}
catch(ExceptionSubClass1 e) {
...
}
catch(ExceptionSubClass2 e) {
...
}
(2)カスタム例外クラス
プログラムを作成するときに、Exceptionクラス(システム例外クラス)を拡張して独自の例外クラスを定義し、プログラムのニーズに応じてこれらの例外を生成するメソッドを指定できます。メソッドが宣言throws关键字
されると、宣言によって生成されるいくつかの例外を使用でき(メソッド宣言はカスタム例外クラス名をスローします)、メソッドのメソッド本体で例外を生成する操作を指定できます。つまり、次のオブジェクトを作成します。対応する例外クラス。throwキーワードを使用して例外オブジェクトをスローし、メソッドの実行を終了させます。プログラムは、try-catchステートメントブロックで発生する可能性のある例外のメソッドを呼び出す必要があります。catchの役割は、throwキーワードによってスローされた例外オブジェクトをキャプチャすることです。
throw:用在方法体中表示抛出异常
throws:用在自定义异常方法声明时表示这个方法会抛出异常。
4、アサーション
アサーションステートメントは、コードのデバッグフェーズで非常に効果的であり、通常、プログラムが例外をキャッチして処理する準備ができていないエラーに使用されます。
(1)構文形式
キーワードassertを使用して、アサーションステートメントを宣言します。2つの形式があります。
assert 返回值为boolean类型的表达式;
式がtrueを返す場合、プログラムは実行を継続します。それ以外の場合、プログラムはすぐに停止します。
assert 返回值为boolean类型的表达式:执行表达式;
ブール型の式がtrueを返す場合、プログラムは実行を継続します。戻り値がfalseの場合、プログラムはアサーションからの実行を停止し、実行式の値を出力します。
(2)アサートステートメントの有効化と無効化
Javaインタープリターを使用してアプリケーションを直接実行する場合、アサーションステートメントはデフォルトでオフになっています。プログラムをデバッグするときに、-eaを使用してアサーションステートメントを有効にできます。java -ea mainClass