简述:
由于最近遇到不少需要反射的类,而其中不乏内部类,在此总结一下内部类的全限定名的规律。
成员内部类
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());
}
}
打印结果:
class com.test.InnerClassTest$StaticInner
class com.test.InnerClassTest$Inner
匿名内部类
匿名内部类的全限定名满足如下规律: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$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());
}
}
上例打印结果:
class com.test.InnerClassTest$1Inner
class com.test.InnerClassTest$2Inner
在测试代码的基础上在交换main中functionA、B位置后的结果:
class com.test.InnerClassTest$2Inner
class com.test.InnerClassTest$1Inner
在测试代码基础上交换functionA、B声明位置的结果:
class com.test.InnerClassTest$2Inner
class com.test.InnerClassTest$1Inner
本文总结了Java内部类的全限定名规律,包括成员内部类、匿名内部类和局部内部类。成员内部类全限定名为`包名.外部类名$内部类名`,匿名内部类和局部内部类的全限定名会包含外部类名和一个以1开始的正整数,表示在外部类上下文中的顺序。
171万+

被折叠的 条评论
为什么被折叠?



