Java学習日記13——内部類、局部類、匿名類、及びゴミ回収メカニズム

11123 ワード

Java学習日記13——内部クラスと匿名クラス、およびゴミ回収メカニズム
対象の明確化とごみ回収メカニズム
 Javaは自動的なゴミ回収メカニズムとオブジェクトの明確な管理を持っているので、基本的に手動で操作する必要はなく、delete文を使ってオブジェクトを削除する必要もなく、Javaは自動的にオブジェクトが使用されているかどうかを分解し、メモリを自動的に解放することができます.また、実行するプログラムやスレッドが多すぎる場合は、System.gc()メソッドを使用してシステムのゴミ回収やクリーンアップを推奨する必要がある可能性があります.もちろん、ここでのgc()メソッドは、システムが行うことを推奨するだけで、実際にシステムが実現できる場合は自動的に行い、手動で解放するわけではありません.
内部クラス
Javaの内部クラス、すなわちクラスでクラスを再定義する場合、このように定義された内部クラスは、クラス全体で直接読み込んで使用することができ、クラスの外部で呼び出す場合はクラス名.内部クラスの形式で呼び出す必要がある.内部クラスを呼び出す方法や変数は?クラス名.内部クラス.内部クラスのメソッド名/変数名の形式で呼び出す必要があります.例を挙げます.
class insideclass {
	private int a = 1010;
	public class inside {
		int a  = 1111;
		public void say(int a ) {
			System.out.println("    a :"+insideclass.this.a);
			System.out.println("    a :"+this.a);
			System.out.println("      a :"+a);
		}
	}
	public static void main(String[] args) {
		inside i = new insideclass().new inside();
		i.say(1100);
	}
}

プログラムの実行結果は次のとおりです.
    a :1010
    a :1111
      a :1100

上記からも分かるように、内部クラスのオブジェクトを作成するにはinside i=new insideclass().new inside();で行ないます.ここでは2つのnewを使いました.
 注意:クラスのメンバーでも内部クラスのメンバーでも、このクラスに属しており、様々な修飾語で修飾することができます.しかしstatic修飾の内部クラスは、内部クラスがstatic修飾されると、このクラスが実際に外部クラスであることを表すため、特に注意が必要である.staticの特性に従って、修飾されたクラスは外部クラスのインスタンスに関係のないクラスになるため、外部クラスを意味します.だからstaticで修飾された内部クラスをネストクラス(nested class)にする人もいる.
static内部クラスを使用する際に注意すべき事項:
1.staticクラスをインスタンス化する場合、newの前にオブジェクトインスタンス変数を使用する必要はありません.2.staticクラスで外部クラスにアクセスできない非staticフィールドおよびメソッド、すなわちstaticメンバーのみにアクセスできます.3.staticメソッドでは、static以外のドメインやメソッドにアクセスできないし、接頭辞を持たないnewの非static部内クラスにアクセスできない.また、staticで修飾された内部クラスでエンティティオブジェクトを作成する必要がある場合は、外部クラスを直接使用できます.内部クラスのフォーマットは、前のように複雑ではなく、デュアルnewも使用します.例:
class insideclass {
	private int a = 1010;
	static class inside {
		int a  = 1111;
		public void say(int a ) {
		//         this          ,   static          
			System.out.println("     a :"+this.a);
			System.out.println("       :"+a);
		}
	}
	public static void main(String[] args) {
		insideclass.inside i = new insideclass.inside();//            
		i.say(1100);
	}
}

プログラムの実行結果は次のとおりです.
     a :11111100

オブザーバは、static以外の外部クラス変数はアクセスできないため、このメソッドボディはthisで外部クラスのデータにアクセスできないことを発見します.現在の内部クラスの変数にのみアクセスできます.
ローカルクラス
簡単に言えば、ローカルクラスはメソッド体で定義されたクラスであり、ローカルクラス(local class)と呼ばれる.実は内部類の特殊な状況でもある. 1.この場合,局所変数と同様にpublicなどの修飾語では修飾できず,finalやabstractでのみ修飾できる. 2.このようなクラスは外部クラスのメンバーにアクセスできるが、現在のメソッドの通常のローカル変数にアクセスできず、final修飾のローカル変数にのみアクセスできる(final修飾のローカル変数はグローバル変数と理解できるため).
匿名クラス
 一部の局所クラスは実際には1回しか実行されないため、通常は名前を付けずに親クラスまたはインタフェースの名前を直接使用することもでき、コンパイラはコンパイル時にxxxx$1などの名前を自動的に生成し、このようなクラスは直接定義時にエンティティを作成します.作成された式は、newクラス名またはインタフェース名(){...}はclassキーワードもextendsもimplementsも使用しません. 匿名クラスの構築方法を定義する必要がある場合は、この匿名クラス自体に名前がないため、親クラスの構築方法を使用します.newの新しいオブジェクトでパラメータを直接付ける必要がある場合は、親クラスの構築方法を使用します.匿名クラスのアプリケーションの典型的なアプリケーションは、登録イベントのリスナーであってもよい.ボタンが押されると、対応する文を実行する必要があり、匿名クラスを直接応答として使用することができ、コードの読解性をある程度高めることができる.例:
SymAction  buttonAction = new SymAction();
btnNew.addActionListener(buttonAction);

btnNew.addActionListener(new ActionListener(){//   new      ,         new
	public void actionPerformed(ActionEvent event)
	{
		btnNew_ActionPerformed(event);
	}
});

Javaに興味があれば、前の号の基礎知識を知ることができます!次のリンクを添付します.
Javaプログラミング基礎認知:Java学習日記1——基礎認知Javaオブジェクト向けプログラミング認識:Java学習日記2——オブジェクト向けプログラミング認知Javaプログラムの基本構造認識:Java学習日記3——プログラムタイプと認知Javaを構成する入出力方法まとめ:Java学習日記4——Java入出力方法Javaのデータタイプ、変数、定数、演算子:Java学習日記5-データ型、変数、定数、演算子、配列Java学習日記6-クラス、フィールド、メソッド、thisの使用:Java学習日記6-クラス、フィールド、メソッド、thisの使用Java学習日記7-クラスの継承、super使用ルール:Java学習日記7-クラスの継承、super使用規則Java学習日記8——修飾子:Java学習日記8——public、static、private、final、abstract、protected Java学習日記9——インタフェース(長文アラート):Java学習日記9——インタフェース(長文アラート)Java学習日記10——Java中の変数とその伝達:Java学習日記10——Java中の変数とその伝達Java学習日記11——多態と虚方法呼び出し:Java学習日記11——多態と虚方法Java学習日記12を呼び出す——構造方法とその初期化、構造方法の実行過程——Java学習日記12——構造方法とその初期化、構築メソッドの実行プロセス