虚拟机克隆

什么是对象克隆?

对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程。 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容。 这就是为什么在克隆后更改原始对象的内容时,所做的更改不会反映在克隆对象中的原因。

我们可以在Java中克隆任何对象吗?

不,我们不能。 当我们尝试直接克隆未实现名为'Cloneable'的标记接口的对象实例时,将导致一个名为CloneNotSupportedException的异常。 因此,为了允许克隆对象实例,相应的对象类必须实现Cloneable接口。 例如 -

public class Employee {private String name;public Employee(String name) {this.name = name;}public String getName() {return name;}public static void main(String[] args) {Employee emp = new Employee("Abhi");try {Employee emp2 = (Employee) emp.clone();System.out.println(emp2.getName());} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}

上面的代码在执行时会引发异常,例如–

java.lang.CloneNotSupportedException: Employeeat java.base/java.lang.Object.clone(Native Method)at Employee.main(Employee.java:16)

请注意,Cloneable是标记接口,这意味着它没有任何克隆方法规范。 在上面的代码片段中,实现Cloneable只是向JVM指示可以克隆Employee类实例,并且Object类的clone方法对Employee类而言是合法的。

下面是如何正确克隆Employee类实例以及在Employee类中覆盖Object的clone方法的方法。

public class Employee implements Cloneable {private String name;public Employee(String name) {this.name = name;}public String getName() {return name;}public Object clone()throws CloneNotSupportedException{  return (Employee)super.clone();  }public static void main(String[] args) {Employee emp = new Employee("Abhi");try {Employee emp2 = (Employee) emp.clone();System.out.println(emp2.getName());} catch (CloneNotSupportedException e) {e.printStackTrace();}}
}

其他标记接口是SerializableCloneableRemote接口。

翻译自: https://www.javacodegeeks.com/2018/03/understanding-cloneable-interface-in-java.html

虚拟机克隆

虚拟机克隆_了解Java中的可克隆接口相关推荐

  1. java中的深度克隆浅克隆_了解Java中的可克隆接口

    java中的深度克隆浅克隆 什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对 ...

  2. java深度克隆_浅析Java中clone()方法浅克隆与深度克隆

    现在Clone已经不是一个新鲜词语了,伴随着"多莉"的产生这个词语确实很"火"过一阵子,在Java中也有这么一个概念,它可以让我们很方便的"制造&qu ...

  3. java饲养员喂动物_体现JAVA中的面向对象思想,接口(抽象类)的用处 :饲养员给动物喂食物 | 学步园...

    package com.softeem.demo; /** *@authorleno *动物的接口*/ interface Animal { publicvoid eat(Food food); } ...

  4. java饲养员喂动物_体现JAVA中的面向对象思想,接口(抽象类)的用处 :饲养员给动物喂食物...

    package com.softeem.demo; /** *@authorleno *动物的接口*/ interface Animal { publicvoid eat(Food food); } ...

  5. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  6. java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...

    做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{ //动物的接口    public void eat(Food food); // ...

  7. 理解java中的两种接口

    在java 中我们常常提高接口一词.在java 中有两中接口. 第一种接口:就是指系统对外提供的所有服务,在对象中表现为public类型的方法的声明.也就是我们常常在一个类中写的public的方法了. ...

  8. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  9. 深入理解Java中的抽象类和接口

    对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...

最新文章

  1. Benchmarking of long-read correction methods长期校正方法的基准测试
  2. 使用SSM+JSP实现一个教务管理系统
  3. 操作系统实验报告15:进程同步与互斥线程池
  4. JS template string 神奇术
  5. 天池 在线编程 扫雷(BFS)
  6. 使用tkinter模块在Python中进行GUI编程
  7. 让版面充满空间感的海报PSD分层模板,你一定要看看!
  8. C语言内存对齐详解(1)
  9. python循环怎么跳过开始循环,如果循环内部调用的函数执行时间太长,你怎么能跳过python中的循环迭代?...
  10. mysql集群会备份数据吗_MySQL 集群备份2-功能分析
  11. 微信公号“架构师之路”学习笔记(一)-无限容量数据库架构设计(数据库分组、分片架构等)
  12. 买的是ARM指令集授权,不是已设计好的CPU核?
  13. 细说面试│产品经理面试快速上岸
  14. 什么软件可以测试内存条稳定性,内存检测就这么简单,学会这几个软件就可以了...
  15. 一文看懂Modbus, Rtu, Rs485等名词的联系
  16. 万能码,你的启明星(安全扫码专业委员会)
  17. 关于仙童八叛徒(转)
  18. 广工大物实验报告十七——铁磁材料的磁滞回线和基本磁化曲线
  19. 小程序流量主能赚多少_微信:6月1日起调整小程序和公众号流量主广告收入分成比例...
  20. 大数据可视化陈为智慧树_知到智慧树_大数据可视化_大学课后答案

热门文章

  1. memcache缓存服务器(nginx php memcache mysql)
  2. js的变量作用域 ,变量提升
  3. 微信公众平台消息接口开发(13)多语种互译
  4. 互联网或将进入泡沫2.0时代
  5. mysqldump 备份报错
  6. Mach-O 二进制文件解析
  7. python flask 设置个性化的响应体 响应头 状态码
  8. python 字符串形式的列表 转 列表
  9. python3 url 提取 ip 端口 协议
  10. python3 pip 更换国内 pypi 镜像 源