1.类、枚举、接口、注解、数组类型、原生类型的名称.class

示例:

Class classString=String.class;//类

Class classEnum=RetentionPolicy.class;//枚举

Class classInterface=Serializable.class;//接口

Class classAnnotation=Retention.class;//注解

Class classInt=int.class;//原生类型

Class classIntArray=int[].class;//原生数组类型

Class classStringArray=String[].class;//数组类型

2.对象.getClass()

由于原生类型不是对象,所以无法使用getClass(),其他类型都是支持的。

示例

Class classString = new String().getClass();// 类

Class classEnum = RetentionPolicy.SOURCE.getClass();// 枚举

Class classInterface = new Serializable() {}.getClass();// 接口

Class classAnnotation = new Documented() {public Class extends Annotation> annotationType() {return null;}}.getClass();// 注解

// Class classInt=。。。;//原生类型不是对象,不能使用getClass()方法

Class classIntArray = new int[] {}.getClass();// 原生数组类型

Class classStringArray = new String[] {}.getClass();// 数组类型

3.使用Class.forName

Class.forName方法有两个:

1.forName(String name)

2.forName(String name, boolean initialize,ClassLoader loader)

forName(String name)其实调用的是forName(String name,boolean initialize,ClassLoader loader)

forName(className, true, ClassLoader.getCallerClassLoader());

boolean initialize参数很关键,如果为true,类会被初始化,静态变量会赋上初始值,静态代码块会被执行,如果为false则不会被初始化。

Class.forName仍然不支持原生类型,但其他类型都是支持的。

示例:

Class classString = Class.forName(“java.lang.String”);// 类

Class classEnum = Class.forName(“java.lang.annotation.RetentionPolicy”);// 枚举

Class classInterface = Class.forName(“java.io.Serializable”);// 接口

Class classAnnotation = Class.forName(“java.lang.annotation.Documented”);// 注解

// Class classInt=。。。;//原生类型不是对象,不能使用Class.forName方法

Class classIntArray = Class.forName(“[I”);// 原生数组类型

Class classStringArray = Class.forName(“[Ljava.lang.String;”);// 数组类型

4.使用ClassLoader.loadClass

此方法也能加载类,效果同Class.forName(className, false, ClassLoader.getCallerClassLoader()),不会初始化类。

但ClassLoader.loadClass跟Class.forName相比,ClassLoader.loadClass不能对数组类型使用。

除了原生类型和数组类型,其他类型都是支持的。

示例:

Class classString = ClassLoader.getSystemClassLoader().loadClass(“java.lang.String”);// 类

Class classEnum = ClassLoader.getSystemClassLoader().loadClass(“java.lang.annotation.RetentionPolicy”);// 枚举

Class classInterface = ClassLoader.getSystemClassLoader().loadClass(“java.io.Serializable”);// 接口

Class classAnnotation = ClassLoader.getSystemClassLoader().loadClass(“java.lang.annotation.Documented”);// 注解

//Class classInt=。。。;//原生类型不是对象,不能使用ClassLoader.loadClass方法

//Class classIntArray = ClassLoader.getSystemClassLoader().loadClass(“[I”);// 数组类型不能使用ClassLoader.loadClass方法

//Class classStringArray = ClassLoader.getSystemClassLoader().loadClass(“[Ljava.lang.String;”);// 数组类型不能使用ClassLoader.loadClass方法


版权声明:本文为weixin_32254411原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_32254411/article/details/114045051