57. 什么是反射?
反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。Java反射机制主要提供了以下功能:①在运行时判断任意一个对象所属的类。②在运行时构造任意一个类的对象。③在运行时判断任意一个类所具有的成员变量和方法。④在运行时调用任意一个对象的方法。
58. 什么是 java 序列化?什么情况下需要序列化?
序列化:将 Java 对象转换成字节流的过程。
①当你想把的内存中的对象状态保存到一个文件中或者数据库中时候。②当你想用套接字在网络上传送对象的时候。③当你想通过RMI传输对象的时候。
示例:
public class Test48 implements Serializable { private int width; private int height; public void setWidth(int width) { this.width = width; } public void setHeight(int height) { this.height = height; } public static void main(String[] args) { Test48 myTest = new Test48(); myTest.setWidth(50); myTest.setHeight(30); try { FileOutputStream fs = new FileOutputStream("a.txt"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(myTest); os.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
59. 动态代理是什么?有哪些应用?
当我们需要给某个类或者接口中的方法添加一些额外的功能比如日志、事务的时候,可以通过创建一个代理类来实现这些功能;该代理类既包含了原有类的完整功能,同时在这些功能的基础上添加了其他的逻辑。这个代理类不是事先定义好的,而是动态生成的,比较灵活。
动态代理的应用:①Spring的AOP②加事务③加权限④加日志
60. 怎么实现动态代理?
创建一个InvocationHandler对象;使用工具类Proxy(newInstance()可以产生代理对象,他只是一个产生代理对象的工具类);利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。