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 匿名内部类 匿名内部类的全限定名满足如下规律: 包名.外部类名$由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()); } } 打印结果: 局部内部类 局部内部类全限定名使用如下命名方式: 包名.外部类名$由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 总结 以上就是本文关于Java内部类的全限定名规律代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |