Java 最常见的 208 道面试题(57-63)-------反射,克隆,对象拷贝

57.什么是反射?

java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,
     对于任意一个对象,都能够调用的它的人一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制

58.什么是 java 序列化?什么情况下需要序列化?

将java对象转换成字节流的过程就是序列化
     当java对象需要在网络上传输或者持久化存储到文件中时,就需要对java对象进行序列化处理

59.动态代理是什么?有哪些应用?

当想要给实现了某个接口的类中的方法,加一些额外的处理,例如加日志,加事物等。可以给这个类创建一个代理,
     即创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类不是定义好的,是动态生成的

     动态代理的应用: Spring的AOP ,加事物,加权限,加日志;rpc调用

60.怎么实现动态代理?

首先必须定义一个接口,还要有一个InvocationHandler(将实现接口的类的对象传递给它)处理类。再有一个工具类Proxy(习惯性将其称为代理类,因为调用他的newInstance()可以产生代理对象,其实他只是一个产生代理对象的工具类)。利用到InvocationHandler,拼接代理类源码,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。

61.为什么要使用克隆?

clone()方法是在复制一个对象,赋值的对象是单独独立的,有独自的内存空间
     clone()方法是java中顶层父类Object中的一个方法,此方法在java中实现,是一个本地方法
     在调用本地方法创建对象,比直接new创建对象效率高

62.如何实现对象克隆?

实现Cloneable接口,在克隆对象时也手动克隆属性
     结合序列化(Serializable接口,json格式,xml格式等),完成深拷贝

63.深拷贝和浅拷贝区别是什么?

浅克隆在clone对象时,只会把基本数据类型复制过去;如果是引用类型,只会把引用复制过去,
     也就是被克隆对象和原始对象信息,共同引用一个引用类型的属性
     深克隆在clone时,会把基本数据类型的数据和引用类型的数据,同时复制。克隆对象和原始对象不共同引用一个引用类型
          缺点: 在深克隆时,如果引用对象关系比较复杂,克隆时会比较麻烦,每一个对象都要克隆
          解决方案: 可以用序列化进行解决

发布了13 篇原创文章 · 获赞 1 · 访问量 1518

猜你喜欢

转载自blog.csdn.net/qq_42029989/article/details/104898207