java的新特性反射机制应用及操作示例详解
前言
说起发射,先说正射是什么,我们代码中通过User user = new User();代码创建一个对象,并调用User类的成员变量或方法,这种我们通过Class信息获取class实例,称之为正射,这种代码编译器编译时便知道他会生成一个user对象。
如果我们在写代码时不知道我们要操作的对象类型,他可能是User类型,也可能是House类型,而User类型和Clazz类型有没有继承关系,只知道要调用他的getId()方法,那又该怎么调用对象的方法呢?
反射
对于反射而言,我们获得了一个对象的实例,并且知道了这个对象的类型,那么我们便可以对他进行一切操作。
这是由于JVM为每一个加载的class都创建了一个class实例,并保存了实例的所有信息,包括类型,父类,方法,属性等等,这使得我们可以获取class实例的所有信息。
这种通过class实例获取class信息的方法称为反射
获取class又3种方法
通过一个class的静态变量class获取
Class clazz = User.class;
通过完整包路径获取
Class clazz = Class.forName("xiaoqiangZzz.busticket;");通过实例获取
Object object = getObject(); Class clazz = object.getClass();
获取到class后,我们也可以通过class创建实例对象
Object object = clazz.newInstance();
Object object = clazz.newInstance();
获取属性
Field getField(name):根据字段名获取某个public的field(包括父类)Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类)Field[] getFields():获取所有public的field(包括父类)Field[] getDeclaredFields():获取当前类的所有field(不包括父类)
public void getId(Object object) throws IllegalAccessException {
Class clazz = object.getClass();
Field field = clazz.getField("age");
field.setAccessible(true);
System.out.println(field.get(object));
field.setAccessible(false);
}类似的,我们可以获取方法并调用
Method getMethod(name, Class...):获取某个public的Method(包括父类)Method getDeclaredMethod(name, Class...):获取当前类的某个Method(不包括父类)Method[] getMethods():获取所有public的Method(包括父类)Method[] getDeclaredMethods():获取当前类的所有Method(不包括父类)
public void getMethod(Object object) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
Class clazz = object.getClass();
Method method = clazz.getMethod("getId");
method.invoke(object);
}反射应用
制作一个通用的数据库表导出方法
public void wirte(Object[] objects, Class classN) throws IllegalAccessException {
Sheet sheet = new Sheet();
Field[] fields = classN.getDeclaredFields();
for (int i = 1; i < objects.length; i++) {
Row row = sheet.createRow(i);
for (Field field : fields) {
field.setAccessible(true);
// 写入单元格
...........
field.setAccessible(false);
}
}注解获取类
以上就是java的新特性--反射的详细内容,更多关于java的新特性--反射的资料请关注脚本之家其它相关文章!
相关文章
详解springboot集成websocket的两种实现方式
这篇文章主要介绍了springboot集成websocket的两种实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
SpringCloud集成Micrometer Tracing的代码工程
Micrometer Tracing 是一个用于微服务架构的追踪库,它提供了一种简单而强大的方式来收集和报告分布式系统中的性能和调用链信息,Micrometer Tracing 旨在帮助开发者和运维人员理解微服务之间的交互,本文给大家介绍了如何在 Spring Cloud 集成 Micrometer Tracing2024-12-12


最新评论