Java内部クラスの全限定定名法則コードの例

2866 ワード

簡単な説明:
最近反射を必要とするクラスが少なくないため,内部クラスも少なくないが,ここでは内部クラスの全限定名の法則をまとめる.
メンバーの内部クラス
テストの結果、メンバーの内部クラスが静的であるかどうかにかかわらず、その全限定名には次の名前付け方法が使用されます.
包名外部クラス名$内部クラス名
テストコード:

package com.test;
public class InnerClassTest {
	static class StaticInner{
	}
	class Inner{
	}
	public static void main(String[] args) {
		StaticInner si = new StaticInner();
		Inner in = new InnerClassTest().new Inner();
		System.out.println(si.getClass());
		System.out.println(in.getClass());
	}
}

印刷結果:
classcom.test.InnerClassTest$StaticInner classcom.test.InnerClassTest$Inner
匿名の内部クラス
匿名内部類の全限定定名は以下の法則を満たす.
包名外部クラス名$が1から始まる正の整数-クラスのロード順に並べ替えられます.
テストコード

package com.test;
public class InnerClassTest {
	static Object staticAnClass = new Object(){
	}
	;
	static Object staticBlockAnClass;
	static {
		staticBlockAnClass = new Object(){
		}
		;
	}
	Object anClass = new Object(){
	}
	;
	Object blockAnClass;
	{
		blockAnClass = new Object(){
		}
		;
	}
	public static void main(String[] args) {
		InnerClassTest functionClass = new InnerClassTest(){
		}
		;
		System.out.println(staticAnClass.getClass());
		System.out.println(staticBlockAnClass.getClass());
		InnerClassTest test = new InnerClassTest();
		System.out.println(test.anClass.getClass());
		System.out.println(test.blockAnClass.getClass());
		System.out.println(functionClass.getClass());
	}
}

印刷結果:class com.test.InnerClassTest$1 class com.test.InnerClassTest$2 class com.test.InnerClassTest$3 class com.test.InnerClassTest$4 class com.test.InnerClassTest$5
ローカル内部クラス
ローカル内部クラスのフルネームには、次の名前が使用されます.
包名外部クラス名$は、1から始まる正の整数の後にローカルクラス名と続く-数値部分は、外部クラスコンテキストに局所クラスが現れる前後の順序である
テストコード

package com.test;
public class InnerClassTest {
	public static void main(String[] args) {
		functionA();
		functionB();
	}
	public static void functionA() {
		class Inner {
		}
		;
		System.out.println(new Inner().getClass());
	}
	public static void functionB() {
		class Inner {
		}
		;
		System.out.println(new Inner().getClass());
	}
}

前例の印刷結果:
classcom.test.InnerClassTest$1Inner  classcom.test.InnerClassTest$2 Innerはテストコードに基づいてmain中のfunctionA,Bの位置を交換した結果:classcom.test.InnerClassTest$2Inner  classcom.test.InnerClassTest$1 Innerはテストコードに基づいてfunctionA、B宣言位置を交換した結果:classcom.test.InnerClassTest$2Inner  classcom.test.InnerClassTest$1Inner
まとめ
以上,Java内部クラスの全限定定名法則コードの例について述べたすべての内容であり,皆さんの役に立つことを願っている.興味のある方は引き続き当駅の他の関連テーマを参照することができます.不足点があれば、伝言を歓迎します.友达の本駅に対する支持に感谢します!