在运行状态下,对于任意一个类,我们都可以获取这个类的所有属性和方法,对于任意一个对象,我们都可以回去它的任意属性和方法,这种动态获取信息和动态调用方法的功能就称为java语言的反射机制。也就是说我们只要知道类一个类或者对象的运行时类型,那么他们的属性和方法我们都可以获得,对于我们来说该类完全是透明的。
获取运行时类型的方式:(代码需要放到try catch中,否则会有Unhandled exception)
反射机制获取的信息:
1.获取实例化对象:(存在无参构造器)
2.获取全部构造函数
3.获取属性
4.获取方法
5.获取全部方法和获取全部属性 与获取全部构造器类似
6.获取所有接口
Class[] niterfaces = aClass.getInterfaces();
7.动态代理
要想实现动态代理,一定会用到java.lang.reflect包的Proxy类和InvocationHandler接口,jdk只能对接口实现动态代理.
接口
实现类(没有全部截出)
测试类
测试结果
java反射实例
向一个泛型为string类型的list集合中插入一个int类型的数据
原理:集合中的泛型只在编译时有效,在运行时会失效
结果
可以在一个servlet中实现多个功能
BaseServlet 重写service() 利用反射机制掉用指定方法
新建ServletExample 定义不同方法
访问这个servlet时,由于没有service() 所以会调用父类的service(),因为方法的编写都在子类中,所以通过反射,获取到子类中对应的方法并运行。***其中this代表的是ServletExample。