什么是反射
反射java语言中的一种机制,通过这种机制可以动态的实例化对象、读写属性、调用方法
一切反射相关的代码都从获得类对象开始
1 Class.forName(完整类名)
JDBC的驱动加载----反射技术通用增删改用到
2 类实例.class
做通用查询的时候用到
3 对象.getClass()
注1:ClassNotFoundException(类名错|少jar包)
注2:同一类的、类对象只会创建一个
类类
所有狗 狗类 Dog.class 狗对象 旺财
name
color
所有猫 猫类 Cat 猫对象 肥波
所有类 类类 java.lang.Class 类对象 特定类
student.class
name
sex
age
利用反射进行实例化
*由上可知我们 能获取到Student.calss * 那么如何通过Studnet.calss拿到Student的一个实例 呢?
反射三大作用(java.lang.reflect.*)
实例化对象
c.newInstance()
我们以前是实例化学生类,那我们为什么不采取以前的呢?
按以前的方法,我们可以配置Servlet,获取到全路径名.calss
eg:AServlet.calss
它继承了extends HttpServlet
但创建tomcat的开发人员是不清楚未来程序员是否会编码出什么类,(AServlet。class)
也就不会去实例化未知的类,相反,反射的好处:能够将未知的类进行实例化,
如果项目里没有,也就报个错,(ClassNotFoundException)
我们调用clz就可以获取很多东西
当我们把无参方法注释掉,就会看到报错,
这也是我们一定要写无参构造器的原因!
tomcat中的web.xml中的servlet 为什么处理用户的请求呢?
请看以下代码:
我们根据上面讲到的实例化对象(反射原理)
Class clz = Class.forName("com.zking.Aservlet");
//获取类对象,获取全路径名(相当于全局配置,)
AServlet a = clz.newInstance();
tomcat开发人员定义好了HttpServlet的service方法处理网络请求,进行开发,调用
HttpServlet h = a;
这里的a包括了所有的方法,属性
上面我们通过反射的方式调用无参构造器来实例化对象,现在我们来通过反射的方式调用带有一个参数的实例化对象
注:一定要提供无参构造器
动态调用方法
Method m;
m.invoke
读写属性
Field set/get