Java对象克隆

Java不提供克隆(复制)对象的自动机制。克隆对象意味着逐位复制对象的内容。要支持克隆操作,请在类中实现clone()方法。Object类中的clone()方法的声明如下:


1

protected  Object clone()  throws   CloneNotSupportedException

clone()方法声明为protected。 因此,不能从客户端代码调用它。以下代码无效:


1

2

Object obj  = new Object();

Object clone = obj.clone(); // Error. Cannot  access protected clone() method

需要在类中声明clone()方法为public来克隆类的对象。
它的返回类型是Object。 这意味着将需要使用clone()方法转换返回值。
假设MyClass是可克隆的。 克隆代码将如下所示


1

2

MyClass mc  = new MyClass();

MyClass clone = (MyClass)mc.clone(); // Need to use  a  cast

Object类中的clone()方法会抛出CloneNotSupportedException。要调用clone()方法,需要将调用放在try-catch块中,或者重新抛出异常。

 点击链接查看详细内容

时间: 2024-10-15 10:48:28

Java对象克隆的相关文章

Java对象克隆了解

1.java接口中有一种空的接口叫标识接口,这种接口值起到标识作用. 2.要实现java对象克隆需要用到Object类的 protected Object clone() throws CloneNotSupportedException    方法,这个方法为protected限定,在本包中,或者不同包的子类中才能访问,并且抛出异常. 3.如果要实现对象克隆首先被克隆的类必须实现Cloneable接口,如果没有实现这个接口,调用clone()方法会抛出 CloneNotSupportedExc

Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨

Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么要对对象进行克隆.Java中所有的对象都是保存在堆中,而堆是供全局共享的.也就是说,如果同一个Java程序的不同方法,只要能拿到某个对象的引用,引用者就可以随意的修改对象的内部数据(前提是这个对象的内部数据通过get/set方法曝露出来).有的时候,我们编写的代码想让调用者只获得该对象的一个拷贝(也

Java 对象克隆

首先,我们需要知道的是,什么是对象克隆?对象克隆是当程序运行时,可能需要一个新对象,用来保存当前对象的状态,并且新的对象与当前对象没有任何关联,即我改变了新对象属性的值,而当前对象没有发生改变.而这新的对象,就是对当前对象的克隆,或者说拷贝. 要完成对象克隆,有以下要求: 1. 新的对象与当前对象值相同 2. 新的对象与当前对象的引用地址不同 要实现对象克隆,有以下步骤: 1. 对要被对象克隆的对应类继承Cloneable接口,并重载clone方法,将访问权限改成public 2. 将当前对象的

java对象的克隆

java对象克隆方式主要有两种:浅克隆和深克隆 首先,不要把对象的克隆和对象的赋值搞混了,看下图 p2 = p1;就是赋值操作,赋值操作只是让被赋值对象指向之前对象的地址,实际上的物理内存是一块,而克隆操作的结果应该是两个对象分别指向内容相同的两块内存.如下就是克隆操作后的状态: 下面说浅克隆和深克隆: 深克隆和浅克隆的区别主要出现在类里有外部类对象时,如下,Person类中有Address类的对象 1 package cn.itcast.copy; 2 3 import java.io.Ser

Java提高篇——对象克隆(复制)

阅读目录 为什么要克隆?如何实现克隆浅克隆和深克隆解决多层克隆问题总结 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况. 但是如果你复制的是一个对象,情况就有些复杂了. 假设说我是一个beginner,我会这样写: class Student { private int number; pu

Java对象和集合的拷贝/克隆/复制

昨天同事遇到了一个奇怪的问题,他需要将一个JavaBean拷贝一份,然后对新创建的Bean进行操作.但是他对新的Bean操作后,会影响旧的Bean的值.当听到这个问题的时候,我第一反应就是他的拷贝方法有问题,只是将aBean的内容复制给了bBean,但是在内存中指向的是同一个地址.这里就引出了两个关键词,浅拷贝和深拷贝. 浅拷贝(浅克隆) 被复制对象的所有变量值都和原来的对象的值相同,但是复制后的对象的引用仍然指向原来的对象.简单来说,就是对A进行拷贝生成B,只是将A的值复制给了B,内存中指向的

[Java学习笔记]对象克隆

对象克隆: 浅克隆: 被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象 深克隆: 被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象 Java中实现克隆: Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法 查看Java源代码发现Object中

JAVA对象任意深度克隆clone工具类分享

原文:JAVA对象任意深度克隆clone工具类分享 源代码下载地址:http://www.zuidaima.com/share/1550463408114688.htm package com.zuidaima.n_app.util; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import jav

java对象的深浅克隆

package CloneTest; class Dog implements Cloneable{ private String dname; private Integer dage; public Dog clone() throws CloneNotSupportedException{  Dog cloned=(Dog) super.clone();  return cloned;   } public String getDname() {  return dname; } publ