对象拷贝和反射

为什么要使用克隆?

想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了。 克隆分浅克隆和深克隆,浅克隆后的对象中非基本对象和原对象指向同一块内存,因此对这些非基本对象的修改会同时更改克隆前后的对象。

如何实现对象克隆?

实现Cloneable接口并重写Object类中的clone()方法。

实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆

深拷贝和浅拷贝的区别是什么?

浅拷贝;当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。

深克隆:除了对象本身被复制外,对象包含的所有成员变量也将复制。

反射的概念:通过class字节码文件对象,操作获取成员信息

获取class字节码文件对象的方式

1.Class.forName()

2.类名.class()

3.对象.getClass()

私有成员如何通过反射访问?

constructor.setAccessible(true); //暴力破解
method.setAccessible(true); //暴力破解
field.setAccessible(true); //暴力破解

 反射的作用和应用场景

可以通过配置文件来动态配置和加载类,以实现软件工程理论里所提及的类与类,模块与模块之间的解耦,反射最经典的应用是Spring框架

优点:提高了java程序的灵活性和扩展性,降低耦合性,提高自适应能力

            允许程序创建和控制任何类的对象。

            应用很广,测试工具,框架都用到了反射

缺点:性能问题:反射是一种解释操作,远慢于直接代码,

          模糊程序内部逻辑:反射绕过了源代码

         增大了复杂性:反射代码比同等功能的直接代码更复杂。

序列化和反序列化

序列化就是将java对象转换为二进制流的方法流通或存储

反序列化就是将二进制流转换为Java对象

BIO 、NIO 、AIO 的区别和使用场景?

BIO:同步并阻塞,一个请求分配一个线程,造成线程开销过大,资源浪费。

NIO:同步非阻塞,请求会发送到多路复用器,会轮询请求线程处理

AIO:异步非阻塞,先经过操作系统处理后,再通知服务器应用去启动线程进行处理。

使用场景:

BIO:适合连接数小且固定的架构,较小架构,对服务器要求高,且局限于idk1.4,程序易懂

NIO:适合连接数多且连接时间短的架构,聊天服务器,编程复杂,jdk1.4开始支持

AIO:适合连接数比较多且连接时间长的架构,相册服务器,充分调用 OS 参与并发操作,编程复杂,jdk7开始

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值