一、反射的概念
官方的话语描述:反射是Java中的一种机制,通过反射可以动态的实例化对象、读写属性、调用方法。
咱的理解是:通过反射,你可以在不知道要面对什么类的时候,更好的写代码,走流程,动态应该就是这个意思,他不是个死的,他可以随着你请求的类来获取class对象,反向获取到这个对象的所有信息,咱感觉反射像是能把一个未知类的属性方法一个一个剖析出来进行使用。
二、为什么需要使用反射
咱来举栗子,假设我们在web.xml中配置了一个stuServlet,那么我们在浏览器请求时,Tomcat是如何找到stuservlet这个业务处理类的?
<servlet>
<servlet-name>stuServlet</servlet-name>
<servlet-class>com.zking.zengjing.StuServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>stuServlet</servlet-name>
<url-pattern>/stu</url-pattern>
</servlet-mapping>
1.首先是xml建模通过url-pattern找到com.zking.zengjing.StuServlet;
2.Tomcat根据servlet-class实例化未知的servlet,来帮助开发人员实现对应的网络请求;
反射使得我们的代码更具灵活性。在上面类似的情况下反射的作用就很大啦!
三、反射的作用
我们还得知道:一切反射的相关代码都从获取类对象开始。咱反向理解理解,就是得先知道要面对的是什么类,他带着什么成员,所以反射的一切相关代码都从获取类对象开始。
反射可以动态的实例化对象,读写属性,调用方法。
获取类对象:
1.Class.forName(完整类名) 常用
2.类名.class
3.对象.getClass()
咱们来看一个实体类:
package com.zengjing.reflect;
public class Student {
private String sid;
private String sname;
public Integer age;
static{
System.out.println("加载进jvm中!");
}
public Student() {
super();
System.out.println("调用无参构造方法创建了一个学生对象");
}
public Student(String sid) {
super();
this.sid = sid;
System.out.println("调用带一个参数的构造方法创建了一个学生对象");
}
public Student(String sid, String sname) {
super();
this.sid = sid;
this.sname = sname;
System.out.println("调用带二个参数的构造方法创建了一个学生对象");
}
public Student(String sid, String sname,Integer age