虚拟机克隆

什么是对象克隆?

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

我们可以在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. 基于Chrome的扩展开发(二)
  2. bt5重启网卡命令_Linux文件的常用操作命令
  3. 偏向锁的获取和撤销逻辑
  4. ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded
  5. [转]粵語固有辭彙與漢語北方話辭彙對照
  6. C++之顺序性容器vector、list、deque的五种定义方式
  7. wsdl互联网短信接口_中国移动推出短信小程序
  8. 矜情作态的拼音及解释
  9. 【Java 泛型】泛型(泛型类型、原始类型、泛型方法)、通配符(上界、下界、无限制、继承)
  10. Sqlserver2005迁移至Oracle系列之二:生成存储过程
  11. 自由的意义--读《希腊的回声》
  12. 定义一个扁平的按钮样式
  13. 步态识别技术与ReID技术
  14. ffmpeg解析出的视频参数PAR,DAR,SAR的意义
  15. WPS文字目录怎么做?目录制作的三种方法
  16. Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (10061),错误代码2003
  17. 使用scrapy爬取手机版斗鱼主播的房间图片及昵称
  18. 3dsmax游戏建模掌握这些技巧方法,6个月学会就业!
  19. python图片RGBA转RGB
  20. android超简单方式实现镂空字体TextView

热门文章

  1. 编写更好的 Java 单元测试的 7 个技巧
  2. 553 mail from must equal authorized user解决方法
  3. 不是所有邮件服务器都叫智慧邮件系统
  4. android异常(2)
  5. centos7 安装 openssl
  6. golang error信息 转 字符串 x := fmt.Sprintf(“%s“, err)
  7. 绕过CDN查找真实IP 方法简介
  8. 使用SHA1、SHA2双证书进行微软数字签名
  9. linux 内核 netfilter 网络过滤模块 (5)-iptables
  10. ubuntu开机出现:system program problem detected