- 浏览: 130405 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
20082233:
你能详细解释下代码的意思吗?谢谢
js时间日期格式化 -
zhoche2008:
好文章,解决了我的问题
swt执行线程 -
hanyafei:
朋友,你那第二个选择之后出错,你那是正确的吗?
JSP+AJAX三级级联及更多级的实现 -
EdenWang:
哥们,这能显示么?
strut2异常问题的解决 -
JavaLanguageFun:
标记一下 ,这个不错。
eclipse插件大全介绍,以及下载地址(转)
转载自:http://www.java2000.net/p1235
如下的程序,我们克隆羊圈,每个羊圈里有一只羊
- package test.lang;
- public class Sheep implements Cloneable {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Override
- public Sheep clone() throws CloneNotSupportedException {
- return (Sheep) super.clone();
- }
- public static void main(String[] args) throws CloneNotSupportedException {
- Sheepfold sheepfold1 = new Sheepfold();
- sheepfold1.setName("第一个羊圈");
- Sheep sheep1 = new Sheep();
- sheep1.setName("第一只羊");
- sheepfold1.setSheep(sheep1);
- Sheepfold sheepfold2 = sheepfold1.clone();
- sheepfold2.setName("第一个羊圈的克隆");
- System.out.println("sheepfold1.name=" + sheepfold1.getName() + ",sheep.name=" + sheepfold1.getSheep().getName());
- System.out.println("sheepfold2.name=" + sheepfold2.getName() + ",sheep.name=" + sheepfold2.getSheep().getName());
- System.out.println("sheepfold1.sheep==sheepfold1.sheep?" + (sheepfold1.getSheep() == sheepfold2.getSheep()));
- }
- }
- class Sheepfold implements Cloneable {
- private String name;
- private Sheep sheep;
- @Override
- public Sheepfold clone() throws CloneNotSupportedException {
- Sheepfold o = (Sheepfold) super.clone();
- return o;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Sheep getSheep() {
- return sheep;
- }
- public void setSheep(Sheep sheep) {
- this.sheep = sheep;
- }
- }
package test.lang; public class Sheep implements Cloneable { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public Sheep clone() throws CloneNotSupportedException { return (Sheep) super.clone(); } public static void main(String[] args) throws CloneNotSupportedException { Sheepfold sheepfold1 = new Sheepfold(); sheepfold1.setName("第一个羊圈"); Sheep sheep1 = new Sheep(); sheep1.setName("第一只羊"); sheepfold1.setSheep(sheep1); Sheepfold sheepfold2 = sheepfold1.clone(); sheepfold2.setName("第一个羊圈的克隆"); System.out.println("sheepfold1.name=" + sheepfold1.getName() + ",sheep.name=" + sheepfold1.getSheep().getName()); System.out.println("sheepfold2.name=" + sheepfold2.getName() + ",sheep.name=" + sheepfold2.getSheep().getName()); System.out.println("sheepfold1.sheep==sheepfold1.sheep?" + (sheepfold1.getSheep() == sheepfold2.getSheep())); } } class Sheepfold implements Cloneable { private String name; private Sheep sheep; @Override public Sheepfold clone() throws CloneNotSupportedException { Sheepfold o = (Sheepfold) super.clone(); return o; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Sheep getSheep() { return sheep; } public void setSheep(Sheep sheep) { this.sheep = sheep; } }
运行结果如下:
- sheepfold1.name=第一个羊圈,sheep.name=第一只羊
- sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊
- sheepfold1.sheep==sheepfold1.sheep?true
sheepfold1.name=第一个羊圈,sheep.name=第一只羊 sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊 sheepfold1.sheep==sheepfold1.sheep?true
克隆的羊圈,里面的羊还是第一个羊圈的羊,他们完全相同.并没有被克隆过来,这就是浅层克隆,我们调整代码,实现深层克隆
- @Override
- public Sheepfold clone() throws CloneNotSupportedException {
- Sheepfold o = (Sheepfold) super.clone();
- o.sheep = this.sheep.clone();
- return o;
- }
@Override public Sheepfold clone() throws CloneNotSupportedException { Sheepfold o = (Sheepfold) super.clone(); o.sheep = this.sheep.clone(); return o; }
运行结果
- sheepfold1.name=第一个羊圈,sheep.name=第一只羊
- sheepfold2.name=第一个羊圈的克隆,sheep.name=第一只羊
- sheepfold1.sheep==sheepfold1.sheep?false
发表评论
-
浅复制与深复制概念
2010-09-28 11:00 7391.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变 ... -
Java基础:Java开发中的23种设计模式
2009-10-26 10:07 5741、工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品, ... -
java中120个经典问题(1)
2009-10-26 10:03 7381.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便 ... -
EXE4J
2009-10-17 16:49 1936进入exe4j的网站 http://www ... -
MANIFEST.MF 文件内容详解
2009-10-15 19:21 725MANIFEST.MF 文件内容详解 打开 ... -
一段最简单的生成不重复随机数的程序
2009-10-15 18:44 930转载:http://www.java2000.net/p711 ... -
java 获取当前路径方法
2009-10-15 16:45 2106import java.io.File; /** * ... -
Java做的注册模块
2009-10-10 14:29 862转载自:http://blog.csdn.net/baohui ... -
java操作注册表
2009-10-10 14:26 807/** *@Author *@Date Oct 10, 2 ... -
Java编程那些事儿108——网络编程示例1
2009-06-24 10:01 670陈跃峰 出自:http://blog.csdn.net ... -
使用J2SE API读取Properties文件的六种方法
2009-05-23 12:26 839转载自:http://www.java2000.net/p85 ... -
Java IO处理类的汇总
2009-05-21 22:41 744http://www.java2000.net/p1225 ... -
Java对象的序列化和反序列化
2009-05-20 23:43 702转载:http://www.java2000.net/p134 ... -
java写文件方法之比较
2009-05-20 23:37 1641import java.io.BufferedOutputSt ... -
Java图像传输方法
2009-05-18 12:07 3125在研发B/S视频系统时候涉及到了图片在网络中的传输,研究了一些 ... -
算术运算符部分=晋升
2009-05-15 23:17 746在算术运算符部分,需要特别注意的一个语法现象是“晋升”。晋升指 ... -
JDK1.5新特性
2009-05-09 21:32 873今天浏览了jdk1.5的新特性: 泛型: public c ... -
编写Java动态代理的步骤
2009-05-08 17:29 919编写Java动态代理的步骤如下: 1.创建一个实现接口 ... -
每个初学者都应该搞懂的几个问题?
2009-05-07 19:56 587转载自:http://flustar.itey ... -
eclipse插件大全介绍,以及下载地址(转)
2009-02-24 17:22 3284好东西先放好先^_^ Eclipse及其插 ...
相关推荐
在Java中,实现深度克隆通常有两种方式:一是通过实现Cloneable接口并重写Object类的clone()方法;二是使用序列化和反序列化技术。前者需要特别注意的是,只有实现了Cloneable接口的类才能调用默认的clone()方法,...
在Employee类中,可以通过重写clone()方法,对hireDay域进行特殊处理,如调用Date类的clone()方法,以创建一个新的Date对象,从而实现深度克隆。 ```java class Employee implements Cloneable { public Object ...
在`clone()`方法中调用了`super.clone()`和`homeAddr.clone()`,确保了深度克隆。 ##### 3.2 使用序列化与反序列化 这种方法利用Java的序列化机制实现深度克隆。具体步骤如下: 1. **实现Serializable接口**:...
go-clone:深度克隆任何Go数据 包clone提供了对任何Go数据进行深度克隆的功能。 它还提供了一个包装器,以保护指针免受任何意外的突变。 Clone / Slowly可以克隆任何结构的未导出字段。 明智地使用此功能。 安装 ...
另一种实现深度克隆的方法是使用`clone()`方法配合自定义的拷贝构造函数或工厂方法。这种方式需要每个类及其所有引用的对象都有合适的拷贝构造函数或工厂方法。对于每个引用的对象,你需要调用它们的克隆方法或使用...
在JavaScript中,我们可以使用JSON对象的`parse()`和`stringify()`方法来实现深度克隆: ```javascript function deepClone(obj) { return JSON.parse(JSON.stringify(obj)); } ``` 这种方法简单易用,但不适用于...
对象克隆ES5的深克隆和比较概要// just for conveniencevar log = function ( ) { console . log . apply ( console , [ ] . slice . call ( arguments ) ) } ; var src = { name : 'dankogai' , lang : [ 'perl' ] ...
java的两种深度克隆方法,1cloneTest是用Cloneable接口的clone方法实现(对象必须要实现cloneable接口).2cloneSerialize.java是用对象流写对象到byte数组中,然后从byte数组中取得对象.(对象必须要实现serializble接口)
然后,你可以定义一个名为`copy()`的方法来执行深度克隆,如下所示: ```java public class YourClass implements Serializable { // ... public YourClass copy() throws IOException, ClassNotFoundException ...
在JavaScript中,深度克隆(Deep Clone)是一种创建新对象的技术,这个新对象与原始对象具有相同的属性和值,但彼此之间互不影响。这在处理复杂数据结构时尤其有用,如对象包含嵌套对象或数组的情况。在描述的示例中...
在语音克隆中,这种模型通常是基于深度学习的神经网络,例如 Tacotron 或 WaveNet。这些模型已经在大量的语音数据上进行了训练,学会了将文本转化为自然的语音。预训练模型可以作为基础,通过进一步的微调以适应特定...
深度克隆并返回模式的副本,向该模式添加关键路径/模式类型对,您还可以添加另一个模式并复制所有路径、虚拟、getter、setter、索引、方法和静态。 特征: 深度克隆模式 复制路径、虚拟、getter、setter、索引、...
`clone()`的使用通常涉及到深度复制和浅复制的概念,这两者在数据结构和内存管理中扮演着关键角色。 首先,让我们理解`clone()`的基本用法。`clone()`方法创建并返回一个当前对象的副本,新创建的对象与原对象具有...
基于的深度克隆,在处理大对象时比传统的克隆实现效率更高。 需要节点6或更高版本。 注意:这不是传统的clone()。 对源对象的更改将反映在克隆中,但是对克隆的更改不会修改源。 表现 根据对象大小的不同, ...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...
- **深度克隆**(Deep Clone):不仅复制对象本身,还递归地复制其引用的对象。如果对象的成员变量是复杂类型(如其他对象),则需要手动处理这些成员的克隆以确保完整的深拷贝。 理解并正确使用`clone`方法是Java...
Java提供了两种主要的克隆方式:浅度克隆(Shallow Clone)和深度克隆(Deep Clone)。理解这两种克隆的区别对于优化内存管理和复制复杂对象至关重要。 **浅度克隆(Shallow Clone)** 浅度克隆仅仅复制了对象本身...
为了实现深克隆,通常需要自定义克隆逻辑,因为`Object`的`clone()`方法无法处理引用类型的深度复制。这通常涉及序列化和反序列化的过程,或者手动复制每个引用类型的字段。 例如: ```java class DeepCloneExample...