虚拟机克隆_了解Java中的可克隆接口
虚拟机克隆
什么是对象克隆?
对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程。 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容。 这就是为什么在克隆后更改原始对象的内容时,所做的更改不会反映在克隆对象中的原因。
我们可以在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();}}
}
其他标记接口是Serializable , Cloneable和Remote接口。
翻译自: https://www.javacodegeeks.com/2018/03/understanding-cloneable-interface-in-java.html
虚拟机克隆
虚拟机克隆_了解Java中的可克隆接口相关推荐
- java中的深度克隆浅克隆_了解Java中的可克隆接口
java中的深度克隆浅克隆 什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对 ...
- java深度克隆_浅析Java中clone()方法浅克隆与深度克隆
现在Clone已经不是一个新鲜词语了,伴随着"多莉"的产生这个词语确实很"火"过一阵子,在Java中也有这么一个概念,它可以让我们很方便的"制造&qu ...
- java饲养员喂动物_体现JAVA中的面向对象思想,接口(抽象类)的用处 :饲养员给动物喂食物 | 学步园...
package com.softeem.demo; /** *@authorleno *动物的接口*/ interface Animal { publicvoid eat(Food food); } ...
- java饲养员喂动物_体现JAVA中的面向对象思想,接口(抽象类)的用处 :饲养员给动物喂食物...
package com.softeem.demo; /** *@authorleno *动物的接口*/ interface Animal { publicvoid eat(Food food); } ...
- java comparator相等_详解Java中Comparable和Comparator接口的区别
详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...
- java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...
做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{ //动物的接口 public void eat(Food food); // ...
- 理解java中的两种接口
在java 中我们常常提高接口一词.在java 中有两中接口. 第一种接口:就是指系统对外提供的所有服务,在对象中表现为public类型的方法的声明.也就是我们常常在一个类中写的public的方法了. ...
- 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )
文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...
- 深入理解Java中的抽象类和接口
对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...
最新文章
- 基于Chrome的扩展开发(二)
- bt5重启网卡命令_Linux文件的常用操作命令
- 偏向锁的获取和撤销逻辑
- ERROR: ld.so: object 'libgtk3-nocsd.so.0' from LD_PRELOAD cannot be preloaded
- [转]粵語固有辭彙與漢語北方話辭彙對照
- C++之顺序性容器vector、list、deque的五种定义方式
- wsdl互联网短信接口_中国移动推出短信小程序
- 矜情作态的拼音及解释
- 【Java 泛型】泛型(泛型类型、原始类型、泛型方法)、通配符(上界、下界、无限制、继承)
- Sqlserver2005迁移至Oracle系列之二:生成存储过程
- 自由的意义--读《希腊的回声》
- 定义一个扁平的按钮样式
- 步态识别技术与ReID技术
- ffmpeg解析出的视频参数PAR,DAR,SAR的意义
- WPS文字目录怎么做?目录制作的三种方法
- Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (10061),错误代码2003
- 使用scrapy爬取手机版斗鱼主播的房间图片及昵称
- 3dsmax游戏建模掌握这些技巧方法,6个月学会就业!
- python图片RGBA转RGB
- android超简单方式实现镂空字体TextView
热门文章
- 编写更好的 Java 单元测试的 7 个技巧
- 553 mail from must equal authorized user解决方法
- 不是所有邮件服务器都叫智慧邮件系统
- android异常(2)
- centos7 安装 openssl
- golang error信息 转 字符串 x := fmt.Sprintf(“%s“, err)
- 绕过CDN查找真实IP 方法简介
- 使用SHA1、SHA2双证书进行微软数字签名
- linux 内核 netfilter 网络过滤模块 (5)-iptables
- ubuntu开机出现:system program problem detected