ネストされたクラスは、別のクラス内で定義されたクラスを指します。ネストされたクラスは、その周囲のクラスに対してのみ存在します。ネストされたクラスには、静的メンバー クラス、非静的メンバー クラス、匿名クラス、部分クラスの 4 つのタイプがあります。
静的メンバークラスは、最も単純な種類のネストされたクラスです。これは、別のクラス内でたまたま定義された通常のクラスと考えた方がよいでしょう。静的メンバー クラスは、プライベート 変数を含む、外側のクラスのすべてのメンバーにアクセスできます。静的メンバー クラスもアクセシビリティ ルールに準拠します。プライベートに配置されている場合は、それを囲んでいるクラス内でのみアクセスできることを意味します。
public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> { static class ImageVH extends RecyclerView.ViewHolder { //代码省略 } }
Android では、私たちが通常使用する listview の最もよく知られた ViewHolder は、通常はパブリック補助クラスとしての静的メンバー クラスです。ビュー内のレイアウトをリストビューのキャッシュ変数としてキャッシュします。
プライベート静的メンバークラス。ペリフェラルクラスによって表されるオブジェクトのコンポーネントを表すために使用されます。
コードは以下の通りです
非静的メンバークラスと静的メンバークラスの構文上の違いは、修飾子staticの有無です。構文は似ていますが、この 2 つは大きく異なります。非静的メンバー クラスの各インスタンスは、外側のクラスの外側のインスタンスに暗黙的に関連付けられます。非静的メンバー クラスのインスタンス メソッド内では、外側のインスタンスのメソッドのみを呼び出すことができます。囲んでいるクラス内では、周囲のインスタンスがなければ、非静的メンバー クラスのインスタンスを独立して作成することはできません。
非静的メンバークラスのインスタンスが作成されると、そのインスタンスと周囲のインスタンスとの間の関連付けも確立され、この関連付けを後で変更することはできません。 この関連付けは通常、外側のクラスのインスタンス メソッドが非静的メンバー クラスのコンストラクターを呼び出すときに発生します。 この関連付けにより、非静的メンバー クラス インスタンスのスペースが消費され、構築にかかる時間のオーバーヘッドが増加します。 メンバクラスが周辺クラスのインスタンスにアクセスする必要がない場合は、static修飾子を追加してください。
public class PhotoListAdapter extends RecyclerView.Adapter<PhotoListAdapter.ImageVH> { class ImageVH extends RecyclerView.ViewHolder { // 真是对外部类的实例持有,在Android开发中很大部分activity中的context的内存泄露因为这个原因。 } }
匿名クラスは、JAVAの他の構文単位とは異なり、名前がありません。他のメンバーと一緒に宣言されず、同時に宣言されます。使用されているので。匿名クラスは、式が存在するコード内のどこにでも出現できます。匿名クラスが非静的環境に出現する場合にのみ、ペリフェラル インスタンスを持ちます。たとえ静的環境で宣言されたとしても、静的メンバーを持つことはできません。
imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 代码省略 } });
ローカルクラスは「ローカル変数を宣言できる」場所であればどこでも宣言されます。また、スコープ規則にも準拠します。 1. ローカル クラスには再利用できる名前があります。 2. 匿名クラスとは異なり、ローカル クラスが非静的環境で定義されている場合にのみ、周辺インスタンスを持つことができ、静的メンバーを含めることはできません。
りー以上がAndroid 開発が知っておくべき Java ネストされたクラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。