首页 > 其他 > 详细

类的获取方式

时间:2019-10-31 14:25:53      阅读:74      评论:0      收藏:0      [点我收藏+]

第一种获取方式:

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

注:原生类型就是指8大基本数据类型

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;//数组类型

 第二种获取方式:

由于原生类型不是对象,所以无法使用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();// 数组类型

 第三种获取方式:

Class.forName方法有两个:

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

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

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

 

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

 

 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;");// 数组类型

 

类的获取方式

原文:https://www.cnblogs.com/hsh5201314/p/11770924.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!