欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-15 20:30:16
简述: 由于最近遇到不少需要反射的类,而其中不乏内部类,在此总结一下内部类的全限定名的规律。 成员内部类 测试结果表明,无论成员内部类是否为静态,其全限定名都使用如下...

简述:

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

成员内部类

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

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

测试代码:

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