Class对象-类型信息

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 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 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=。。。 //Class classIntArray = ClassLoader.getSystemClassLoader().loadClass("[I") //Class classStringArray = ClassLoader.getSystemClassLoader().loadClass("[Ljava.lang.String;")
本网页由快兔兔AI采集器生成,目的为演示采集效果,若侵权请及时联系删除。

原文链接:https://bbs.csdn.net/skill/java/java-9fc47826a4df46f1b40f2d5dfd932d03

更多内容