网站首页 > 精选教程 正文
一、什么是反射(Reflection)?
简单的来讲就是可以从内存中直接获取到运行的class文件并且能够知道这个类的所有属性和方法;对于任意一个Java对象,都能够调用到它的任意一个方法或属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
用一句话来概括的话就是使用反射可以赋予jvm动态编译的能力。
二、反射能用来做什么?
反射可以做的事情实在是太多太多了,并且我们一般都是拿来主义,不会去重复的造轮子,所以有想要使用的框架直接拿过来就用,然后调用框架里面已经写好的方法就可以实现我们想要的业务功能了,那么作为一个框架来说咱们如何能做到通用呢,因为我们不能在框架里面去实现我们具体的业务代码,所以这个时候反射就派上用场了。
三、使用反射实现一个简单案例
我们创建一个java对象,然后动态执行对象里面的方法来给大家演示一下反射的执行过程。
1、创建一个简单的java工程
2、创建一个java类
package pojo; import java.io.Serializable; /** * @Descrption 学生实体类 * @author lizhilun * */ public class Student implements Serializable { private static final long serialVersionUID = 1L; private Integer id;// 主键 private String name;// 姓名 private Integer age;// 年龄 // 公有方法 public void eat(String foodName) { System.out.println(name + "吃" + foodName); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Student(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } public Student() { super(); } } |
3、创建一个反射工具类
package utils; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * @Descrption 反射工具类 * @author lizhilun * */ public class ReflectionUtils implements Serializable{ private static final long serialVersionUID = 1L; public static <T> void invoke(T t) throws Exception { if(t!=null) { Class<? extends Object> clasz = t.getClass(); Field[] fields = clasz.getFields();//获取所有的成员变量 for(Field f: fields) { String name = f.getName();//获取字段名称 System.out.println("成员变量名称:》》》"+name); } Method[] methods = clasz.getMethods();//获取所有的公有方法 for (Method method : methods) { String methodName = method.getName();//获取方法名称 System.out.println(methodName); if(methodName!=null&&"eat".equals(methodName)) { method.invoke(t, "蛋炒饭");//动态执行公有方法 } } } } } |
4、创建一个测试类进行测试
package test; import pojo.Student; import utils.ReflectionUtils; public class ReflectionTest { public static void main(String[] args) { Student student = new Student(1,"黄渤",30);//使用构造方法赋值 try { ReflectionUtils.invoke(student); } catch (Exception e) { e.printStackTrace(); } } } |
这样一个反射的简单应用就已经完成了,大家觉得简单吗?
- 上一篇: Java反射原理详解(5步图解反射原理)
- 下一篇: Java反射详解 java,反射
猜你喜欢
- 2024-11-13 十年Java工程师写下的Java反射使用总结
- 2024-11-13 一起来了解Java中的反射 java反射的步骤原理
- 2024-11-13 Java基础:反射机制,你用得多吗 java反射机制有什么用
- 2024-11-13 每日一点涨薪小知识-JAVA反射 java反射的理解
- 2024-11-13 不是吧,还有人连Java最强大的技术之一:反射还没搞懂?赶紧码住
- 2024-11-13 Java反射的原理以及应用场景 java中反射的实际用法
- 2024-11-13 浅谈java中的反射(恭喜FPX) java里的反射是什么
- 2024-11-13 实操讲解Java的反射机制,你要是再看不懂,神仙都没救了
- 2024-11-13 两分钟学会Java反射 java 反射
- 2024-11-13 三石说:java基础 之 反射 java反射的基石
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)