使用场景 : 根据配置文件生成类
将类的各个组成部分封装为其它对象。
万物皆对象,类也是对象,在jvm类也是对象
效率较低,比正常调用慢30倍,可以使用cglib/javaassist字节码操作代替
•
String[].class
获取Class对象的方式
1.
Class.forName("类全名")
Class.forName(String name, boolean initialize, ClassLoader loader)
这是在类还没有被加载时使用,加载的是本地文件。
多用于在配置文件制定类名然后读取加载出来。
2.
类名.class
这是类加载了但是没实例化的时候用的
多用于参数的传递
3.
对象.getClass()
这是实例化之后的,方法是继承自Object类。
多用于有对象后
•
同一个字节码文件在一次程序运行过程中只会被加载一次。
•
不论哪一种方式,获取的class对象都是同一个
基类
•
Methods inherited from class java.lang.reflect.AccessibleObject
•
getAnnotations,
getDeclaredAnnotation,
getDeclaredAnnotationsByType,
isAccessible,
isAnnotationPresent,
setAccessible,
setAccessible
暴力反射
setAccessible(true) 这是基类的方法
获取构造函数
获取成员变量
获取成员方法
•
软件包getPackage()获取此类的包。
•
booleanisAnnotation()如果此 类对象表示注释类型,则返回true。 booleanisAnnotationPresent(类<? extends
Annotation> annotationClass)如果此元素上 存在指定类型的注释,则返回true,否则返回false。 booleanisAnonymousClass()返回 true当且仅当基础类是匿名类时。 booleanisArray()确定此 类对象是否表示数组类。 booleanisAssignableFrom(类<?> cls)确定由此 类对象表示的类或接口是否与由指定的Class
类表示的类或接口相同或是超类或 类接口。 booleanisEnum()当且仅当该类在源代码中被声明为枚举时才返回true。 booleanisInstance(Object obj)确定指定的Object是否与此 Object表示的对象分配 类 。
booleanisInterface()确定指定 类对象表示接口类型。 booleanisLocalClass()返回 true当且仅当基础类是本地类时。 booleanisMemberClass()返回 true当且仅当基础类是成员类时。 booleanisPrimitive()确定指定 类对象表示一个基本类型。 booleanisSynthetic()如果这个类是一个合成类,返回true ;
返回false其他。
•
TnewInstance()创建由此 类对象表示的类的新实例。
•
StringgetName()返回由 类对象表示的实体(类,接口,数组类,原始类型或空白)的名称,作为
String 。
评论区