- 什么是反射? 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力
反射的物质基础是Class类,其中C是大写的。
Java反射:
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法
Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法。
- 什么是 java 序列化?什么情况下需要序列化? 序列化是指,把Java对象转换成一个字节序列,以便传输。
什么情况下需要序列化:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; b)想在网上传输时,比如想用套接字传输或用RMI或Dubbo调用时;
- 动态代理是什么?有哪些应用? 动态代理:
当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等,就可以给这个类创建一个代理,这个代理类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦合性。
动态代理的应用,非常典型就Spring 里的AOP,以及各种注解
- 怎么实现动态代理? 1 必须定义一个接口
2 定义InvocationHandler(将实现接口的类的对象传递给它)处理类。
3 定义一个代理类Proxy(因为调用newInstance()可以产生代理对象,其实他只是一个产生代理对象的工具类)。
4 利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。