ホームページ  >  記事  >  Java  >  【Javaの基礎】内部クラスとその特徴の簡単な紹介

【Javaの基礎】内部クラスとその特徴の簡単な紹介

php是最好的语言
php是最好的语言オリジナル
2018-08-01 13:47:472238ブラウズ

内部クラスについて

内部クラスはネストされたクラスの一種で、次の4種類があります。 [出典]

  1. 静的ネストクラス、通常のクラスに近い静的ネストクラス。は外部クラスへの参照ではありません。外部クラスの静的 ** にのみアクセスでき、内部クラスに静的 ** がある場合、クラスは静的である必要があります。クラス内部クラス (非静的)、真の内部クラス。

  2. ローカル クラス ローカル クラス (メソッド内で定義)、真の内部クラス。一度実装すると、いくつかのメソッド クラス

  3. 実際の内部クラスは、外側のカプセル化されたクラスのインスタンス変数とメソッドに直接アクセスできます。外部クラスは相互の属性、メソッド (プライベートでも) にアクセスできます (JAVA8)

    1)、8 より前では、匿名の内部クラスで使用されるローカル変数のライフサイクルは、内部クラスのオブジェクトのライフサイクルと矛盾します
2)、内部クラスのメンバー変数のスコープはメソッド内に留まり、メソッドの実行が終了するとローカル変数は消えますが、内部クラスが再度呼び出されるとき、そのローカル変数への参照は存在する可能性があります。

【Javaの基礎】内部クラスとその特徴の簡単な紹介 3) したがって、final は jdk8 の前に使用する必要があります。逆コンパイル後、内部クラスが実際にコンストラクター

を備えた

クラスを生成し、参照された変数が外部クラスのインスタンスを含むパラメーターとして渡されることがわかります (これが、内部クラスがクラスへの参照を保持する理由です)デフォルトでは外部オブジェクトです。メモリ リークが発生しやすい)、その値を独自の変数に代入します。つまり、外部変数の値が内部クラスで変更された場合、

実際には、 の変数値のみが代入されます。外部変数の値ではなく、内部クラス自体が変更されます

。メソッドを介して変数を渡すのと同じように、メソッド内でその値を変更することはできません。その場合、メソッド内の変数はすべて変更されます。地元。したがって、この矛盾の発生を防ぐためには、最終的なものでなければなりません。 [出典]

4) Java8 では、内部クラスが外部クラス変数にアクセスする場合、内部クラスが外部変数を再割り当てしない限り、外部クラス変数は事実上 Final 変数になります。 Java は外部変数を暗黙的に Final として宣言します。 [出典]

5) なぜ Final なのか? 理由は上で簡単に説明しましたが、長さとわかりやすさのために、もう一度詳しく説明します。変数が Final の場合、最後のローカル変数はローカル変数として「コピー」されます。内部クラスのデータメンバー。ローカル内部クラスがローカル変数にアクセスするとき、実際にアクセスされるのはローカル変数の「コピー」です。実行中のスタック内の実際のローカル変数が終了しても、内部クラスのオブジェクトは引き続きローカル変数にアクセスできます。 (コピー、ローカル変数の寿命が延びたようです), 今のところ、final とはあまり関係ありませんが、O(∩_∩)O ははは~「final」の名の下に、最終的にはファイナルに戻る、変数はファイナルです: [ソース]

: 1. 引用タイプ: 参照値は変更されません (常に同じオブジェクトを指します)、レプリカは元の参照変数と同じです コピーは同じです。元の量、意味効果は同じです

[出典]内部クラス: [出典]

論理的な所属を反映し、内部クラスは他のクラスによって制御でき、外部からは見えません

变 外部クラスの変数は外部クラス全体です (内部クラスを含みますが、外部クラスは内部クラスの Private メンバーにアクセスできません)

コンパイル後、内部クラスは別のクラスにコンパイルされます

静的初期化子: 静的。 block: クラス メソッドの外側に存在する静的ブロック。クラスがロードされるときに 1 回だけ実行されます。一般に、静的クラス属性を初期化するために使用されます。

1. 静的メソッドを非静的メソッドでオーバーライドすることはできません。 2. コンストラクターを静的に宣言することはできません

final: 最終状態の特性

1. 基本クラスまたはサブクラスによってオーバーライドできず、マークされている変数は定数です

2. 宣言時に値を割り当てます。そうでない場合、値を割り当てる機会は 1 つだけであり、コンストラクターでのみ明示的に割り当てることができます。

通常の状況では、原因を使用しないでください。それ以外の場合、try ブロックと catch ブロックの return ステートメントと throw ステートメントは無効になり、finally の return ステートメントによって例外が失われます。 【出典】【出典】

try...catch では、複数の catch がある場合、親クラスの例外をサブクラスの例外の下に配置する必要があります。そうしないと、コンパイルが失敗します。私はこれをテストするのが面倒ではありません。通りすがりの同僚が私にいくつかの意見をくれるかもしれません^_^

なぜ内部クラスと例外が一緒に書かれているのですか? 例外を要約してナインリンクに分類する必要があるようです。次の記事はもうシングルトンすぎるので気にしないでください

関連記事:

Java基礎の内部クラスインスタンスの詳細解説

Java基礎の内部クラスインスタンスコードの詳細解説

関連ビデオ:

内部クラス分類とメンバー内部クラスを直接使用する Java の主要な入門ビデオ チュートリアル

以上が【Javaの基礎】内部クラスとその特徴の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。