当前位置: 首页 > 编程笔记 >

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

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

 类似资料:
  • 如何有效地获得简短的完全限定类名。例如,如果我们通过了“com.test.student”,我们需要得到“c.t.student”。

  • 问题内容: 我已经看到了几个与Java中类似的示例,希望有人可以解释发生了什么。似乎可以内联定义一个新类,这对我来说真的很奇怪。 第一行是预期的输出行,因为它只是toString。但是第二似乎函数可以内联重写。 为此有技术术语吗? 还是任何更深入的文档? 如果我有以下代码: 代码输出: 问题答案: 它是一个匿名内部类。您可以在Java文档内部类链接中找到有关它的更多信息。 编辑 我正在添加一个更好

  • 本文向大家介绍Java中的静态内部类详解及代码示例,包括了Java中的静态内部类详解及代码示例的使用技巧和注意事项,需要的朋友参考一下 1. 什么是静态内部类 在Java中有静态代码块、静态变量、静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌套类。静态内部类的定义如下: 在介绍静态内部类之前,首先要弄清楚静态内部类与Java其它内部类的区别。 2. 内部类 什么

  • 我的Gradle项目中有两个依赖项库: OLD:完全使用lib 新:只有db库(固定库) 它们都拥有相同的数据库连接类,包括包,例如:net。我的公司。常见的dbsq。DBConnector()。 我需要的是确保使用新的db连接类,但由于所需的UTIL的其余部分在新的数据库中不可用,所以保留旧的(可以没有db类)作为依赖项。 是否有可能仅排除/包括依赖项的特定类或包?或者确保相同命名类的“重写”?

  • 请注意,我不是在询问Java包命名约定。 例如,Java在法律上不允许包名以数字开头。 然而,官方的Java文档似乎并没有涵盖实际的规则,管理什么可以或不可以在一个包名称中使用。 那套合法的包名是什么?

  • 本文向大家介绍java内部测试类代码详解,包括了java内部测试类代码详解的使用技巧和注意事项,需要的朋友参考一下 我们一般使用的java内部类有4种形式:一般内部类、局部内部类、匿名内部类、静态内部类。以下是我作的一个测试,以说明各种内部类的特性。 有关内部类的特性,代码中有详细说明,如下。 再分享一则实例: 总结 以上就是本文关于java内部测试类代码详解的全部内容,希望对大家有所帮助。感兴趣