Java内部类的全限定名规律代码示例
简述:
由于最近遇到不少需要反射的类,而其中不乏内部类,在此总结一下内部类的全限定名的规律。
成员内部类
测试结果表明,无论成员内部类是否为静态,其全限定名都使用如下命名方法:
包名.外部类名$内部类名
测试代码:
packagecom.test; publicclassInnerClassTest{ staticclassStaticInner{ } classInner{ } publicstaticvoidmain(String[]args){ StaticInnersi=newStaticInner(); Innerin=newInnerClassTest().newInner(); System.out.println(si.getClass()); System.out.println(in.getClass()); } }
打印结果:
classcom.test.InnerClassTest$StaticInner
classcom.test.InnerClassTest$Inner
匿名内部类
匿名内部类的全限定名满足如下规律:
包名.外部类名$由1开始的正整数-按照类装载顺序依次排列
测试代码
packagecom.test; publicclassInnerClassTest{ staticObjectstaticAnClass=newObject(){ } ; staticObjectstaticBlockAnClass; static{ staticBlockAnClass=newObject(){ } ; } ObjectanClass=newObject(){ } ; ObjectblockAnClass; { blockAnClass=newObject(){ } ; } publicstaticvoidmain(String[]args){ InnerClassTestfunctionClass=newInnerClassTest(){ } ; System.out.println(staticAnClass.getClass()); System.out.println(staticBlockAnClass.getClass()); InnerClassTesttest=newInnerClassTest(); System.out.println(test.anClass.getClass()); System.out.println(test.blockAnClass.getClass()); System.out.println(functionClass.getClass()); } }
打印结果:
classcom.test.InnerClassTest$1
classcom.test.InnerClassTest$2
classcom.test.InnerClassTest$3
classcom.test.InnerClassTest$4
classcom.test.InnerClassTest$5
局部内部类
局部内部类全限定名使用如下命名方式:
包名.外部类名$由1开始的正整数后跟局部类名-其中数字部分是局部类在外部类上下文出现的先后顺序
测试代码
packagecom.test; publicclassInnerClassTest{ publicstaticvoidmain(String[]args){ functionA(); functionB(); } publicstaticvoidfunctionA(){ classInner{ } ; System.out.println(newInner().getClass()); } publicstaticvoidfunctionB(){ classInner{ } ; System.out.println(newInner().getClass()); } }
上例打印结果:
classcom.test.InnerClassTest$1Inner
classcom.test.InnerClassTest$2Inner
在测试代码的基础上在交换main中functionA、B位置后的结果:
classcom.test.InnerClassTest$2Inner
classcom.test.InnerClassTest$1Inner
在测试代码基础上交换functionA、B声明位置的结果:
classcom.test.InnerClassTest$2Inner
classcom.test.InnerClassTest$1Inner
总结
以上就是本文关于Java内部类的全限定名规律代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!