反射

反射(reflect)

1. Class对象

1.1 什么是Class对象

当JVM加载某个class文件的时候,会自动创建一个唯一的Class对象(注意:由同一个类加载器加载的class文件),这个Class对象包含了整个class类的信息(例如:类的名称、访问修饰符、字段、字段描述、方法等等一切信息)。当使用new关键字创建这个类的实例时,jvm都会使用这个Class对象来创建类的实例。

1.1 获取Class对象方式

方式说明
Test.class通过类名.class直接获取
t1.getClass()通过对象的getClass()方法获取
Class.forName("...")使用Class类的forName静态方法获取,参数给的是完整类名(包名+类名)

2. 反射

2.1 什么是反射

所谓的反射,是在程序运行时动态获得任何一个Class对象的成员信息(类信息、字段、构造方法、成员方法等),并且能在运行时依据某个Class对象创建当前类的实例。

2.2 Class常用API

方法说明
newInstance()创建类实例
getName()获取类的完整类名
getSimpleName()获取类的简单类名
getPackage()获取类对应的包信息
getSuperclass()获取父类的Class对象
getInterfaces()获取实现的所有接口
getClassLoader()获取当前类的类加载器
getConstructor(..)获取公共且明确参数类型的构造方法
getDeclaredConstructor(..)获取受保护且明确参数类型的构造方法
getConstructors()获取所有公共的构造方法
getDeclaredConstructors()获取所有(包括受保护)的构造方法
getField(..)根据字段名称获取某一个公共的字段
getDeclaredField(..)根据字段名称获取当前类某一个的字段(包括受保护的)
getFields()获取所有公共的字段,包括继承自父类的公共字段
getDeclaredFields获取当前类所有字段,包括受保护的(不包括继承父类的字段)
getMethod(..)根据方法名以及参数类型获取一个公共的方法
getDeclaredMethod(..)根据方法名以及参数类型获取当前类的一个受保护的方法
getMethods()获取所有公共的方法(包括继承自父类的公共方法)
getDeclaredMethods()获取当前类的所有方法,包括受保护的(不包括继承父类的方法)
isAnnotation()此Class是否是一个注解
isAnnotationPresent(..)当前Class时是否定义了某个注解
getAnnotation(..)获取当前类上定义的某个注解
getAnnotations()获取当前类上定义的所有注解
isEnum()此Class是否是一个枚举
isArray()此Class是否是一个数组类型
isInterface()此Class是否是一个接口
...其他API请参照官方文档

2.3 Class对象中的成员

成员说明
Constructor用于描述类的构造方法
Field用于描述类的字段
Method用于描述类的方法
Parameter用于描述方法或构造方法的参数信息

2.3.1 Constructor常用API

API说明
getName()获取当前构造方法的名称
getParameterCount()获取构造方法的参数个数
getDeclaringClass()获取声明此构造方法的Class类
setAccessible(..)设置访问开关
newInstance(..)使用当前的Constructor构建实例
...其他API请参照官方文档

2.3.2 Field常用API

API说明
getType()获取当前字段类型
getName()获取当前字段名称
get(..)获取当前字段的值
set(..)给当前字段赋值
setAccessible(..)设置访问开关
...其他API请参照官方文档

2.3.3 Method常用API

API说明
getName()获取当前方法名称
getReturnType()获取当前方法的返回值
getParameterCount()获取当前方法参数的个数
getParameters()获取当前方法的参数对象
getParameterTypes()获取当前方法的所有参数类型
setAccessible(..)设置访问开关
invoke(..)回调当前的method
...其他API请参照官方文档

2.3.4 Parameter常用API

API说明
getType()获取参数类型
getName()获取参数的名称(说明:JDK8默认编译的时候是不会将参数名信息保存在字节码中,如果想要获取参数名,那么在编译时就需要加上编译参数 ,如:javac -parameters Users.java)
...其他API请参照官方文档

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的高校科研信息管理系统实现了操作日志管理、字典管理、反馈管理、公告管理、科研成果管理、科研项目管理、通知管理、学术活动管理、学院部门管理、科研人员管理、管理员管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让高校科研信息管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值