反射

什么是反射

反射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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值