java——对象的克隆

对象的克隆

  当拷贝一个变量时,原始变量与拷贝变量引用同一个对象,这就就是说,改变一个变量所引用的对象将会对另外一个变量产生影响。如下图:

//拷贝
Employee original = new Employee("jim", 10000);
Employee copy = orginal;

//克隆
Employee copy = original.clone();

clone()方法是object类的一个proteced方法,也就是说,在用户编写的代码中不能直接调用它。只有Employee类才能克隆Employee对象。默认的克隆操作是浅拷贝,它并没有克隆包含在对象中的内部对象。

深拷贝的实现:

//深拷贝
class Employee implements Claoneable{
    //实现深拷贝
    public Employee clone() throws CloneNotSupportedException{//抛出异常
        Employee cloned = (Employee) super.clone();

        cloned.hireDay = (Date) hireDay.clone();

        return cloned;
    }

} 
时间: 2024-08-24 00:18:10

java——对象的克隆的相关文章

java对象的克隆

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

【JAVA零基础入门系列】Day14 Java对象的克隆

今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢?什么时候需要使用呢?先来看一个小栗子: 简单起见,我们这里用的是Goods类的简单版本. public class Goods { private String title; private double price; public Goods(String aTitle, double aPri

零基础入门学习java第十四节:Java对象的克隆

今天要介绍一个概念,对象的克隆.本篇有一定难度,请先做好心理准备.看不懂的话可以多看两遍,还是不懂的话,可以在下方留言,我会看情况进行修改和补充. 克隆,自然就是将对象重新复制一份,那为什么要用克隆呢?什么时候需要使用呢?先来看一个小栗子: 简单起见,我们这里用的是Goods类的简单版本. public class Goods { private String title; private double price; public Goods(String aTitle, double aPri

Java的“影子克隆”和“深度克隆”

今天来学习学习java对象的克隆,在写代码的时候,有时候我们会这样写:对象1=对象2,也就是把对象2赋值给对象1了,但是这样做有个问题,就是如果我们修改了对象2的属性值,对象1的相同属性值也被修改了,反过来亦如此,让我来证明一下: public class A { private String msg; public A() { msg = "Hello"; } public String getMsg() { return msg; } public void setMsg(Stri

java对象比较器和克隆

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: Java代码 publicclassMystring { publicstaticvoidmain(String[] args) { String []a={"早上","

java学习---对象的克隆和序列化

1.假clone,虚拟机只是将对象的内存地址clone了一份,修改克隆后的对象内容,将影响原对象 public class Employee{ public Employee(){ } public Employee(String name, int age){ this.age = age; this.name = name; } @Override public String toString(){ return "姓名: " + name + "年龄: " +

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对象克隆

Java不提供克隆(复制)对象的自动机制.克隆对象意味着逐位复制对象的内容.要支持克隆操作,请在类中实现clone()方法.Object类中的clone()方法的声明如下: 1 protected  Object clone()  throws   CloneNotSupportedException clone()方法声明为protected. 因此,不能从客户端代码调用它.以下代码无效: 1 2 Object obj  = new Object(); Object clone = obj.c

Java对象克隆了解

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