侧边栏壁纸
  • 累计撰写 781 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

反射

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 95 阅读 / 1,415 字
温馨提示:
本文最后更新于 2022-04-30,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
使用场景 : 根据配置文件生成类
将类的各个组成部分封装为其它对象。
万物皆对象,类也是对象,在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

0

评论区