Java内部类的全限定名规律代码示例

这篇文章主要介绍了Java内部类的全限定名规律代码示例,具有一定借鉴价值,需要的朋友可以参考下。

简述:

由于最近遇到不少需要反射的类,而其中不乏内部类,在此总结一下内部类的全限定名的规律。

成员内部类

测试结果表明,无论成员内部类是否为静态,其全限定名都使用如下命名方法

包名.外部类名$内部类名

测试代码

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$2Inner 

在测试代码的基础上在交换main中functionA、B位置后的结果: 

classcom.test.InnerClasstest$2Inner 

classcom.test.InnerClasstest$1Inner 

在测试代码基础上交换functionA、B声明位置的结果: 

classcom.test.InnerClasstest$2Inner 

classcom.test.InnerClasstest$1Inner

总结

以上就是本文关于Java内部类的全限定名规律代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...