- 浏览: 214093 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
jacktao219:
赞一个! 好文,但实际测试后发现第一次 浏览器也木有把url ...
Tomcat 7源码学习笔记 -6 encodeURL深度解析补充 -
mengsanjunqq:
Tomcat 7源码学习笔记 -3 Http11Protocol和Http11NioProtocol -
di1984HIT:
写的很好啊~~~
使用nodejs异步方法导致进程无法退出的问题 -
sygjzmh:
...
诡异的prototype -
blogzhoubo:
小蝶兒 写道这样子和直接放在head里有什么区别呐,还是没有解 ...
通过innerHTML动态插入的script无法执行的解决方法
通过克隆可以得到一个对象的完整复制。
- 浅度克隆: 只是实现了对象表层的克隆,对于包含在对象内部的内容并没有克隆
- 深度克隆: 对包含在对象内部的内容也进行克隆
实现克隆的方法:
1)实现Cloneable接口
2)重写Object类中的protected Object clone() throws CloneNotSupportedException方法并捕获CloneNotSupportedException异常
3)调用super.clone()返回对象
浅度克隆举例:
class Programmer implements Cloneable{
private String name;
private int age;
private double sal;
public Programmer(String name,int age,double sal){
this.name=name;
this.age=age;
this.sal=sal;
}
public Object clone() throws CloneNotSupportedException{
Programmer pg=(Programmer)super.clone();
return pg;
}
public void changeInformation(String name,int age,double sal){
this.name=name;
this.age=age;
this.sal=sal;
}
public String toString(){
return "name:"+name+",age:"+age+",salary:"+sal;
}
}
public class CloneTest{
public static void main(String[] args){
try{
Programmer pg1=new Programmer("Jackson",23,1000);
Programmer pg2=(Programmer)pg1.clone();
pg2.changeInformation("Kevin",25,3000);
System.out.println("pg1="+pg1);
System.out.println("pg2="+pg2);
}catch(CloneNotSupportedException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
执行结果:
C:\javastudy>java CloneTest
pg1=name:Jackson,age:23,salary:1000.0
pg2=name:Kevin,age:25,salary:3000.0
C:\javastudy>
深度克隆举例:
对DeepProgrammer进行克隆时,同时对它包含的Manager也进行克隆。
class Manager implements Cloneable{
private String name;
private int age;
private double salary;
public Manager(String name,int age,double salary){
this.name=name;
this.age=age;
this.salary=salary;
}
public Object clone() throws CloneNotSupportedException{
Manager m=(Manager)super.clone();
return m;
}
public void changeInformation(String name,int age,double salary){
this.name=name;
this.age=age;
this.salary=salary;
}
public String toString(){
return "M_name:"+name+",M_age:"+age+",M_salary:"+salary;
}
}
class DeepProgrammer implements Cloneable{
private String name;
private int age;
private double salary;
private Manager m;
public DeepProgrammer(String name,int age,double salary,Manager m){
this.name=name;
this.age=age;
this.salary=salary;
this.m=m;
}
public Object clone() throws CloneNotSupportedException{
DeepProgrammer dp=(DeepProgrammer)super.clone();
dp.setManager((Manager)m.clone());
return dp;
}
public void changeInformation(String name,int age,double salary){
this.name=name;
this.age=age;
this.salary=salary;
}
public void setManager(Manager m){
this.m=m;
}
public Manager getManager(){
return m;
}
public String toString(){
return "name:"+name+",age:"+age+",salary:"+salary+" "+m;
}
}
public class DeepCloneTest{
public static void main(String[] args){
try{
Manager m1=new Manager("Brown",34,10000);
DeepProgrammer dp1=new DeepProgrammer("Jackson",26,5000,m1);
DeepProgrammer dp2=(DeepProgrammer)dp1.clone();
dp2.changeInformation("Black",30,8000);
dp2.getManager().changeInformation("John",40,20000);
System.out.println(dp1);
System.out.println(dp2);
}catch(CloneNotSupportedException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
执行结果:
C:\javastudy>java DeepCloneTest
name:Jackson,age:26,salary:5000.0 M_name:Brown,M_age:34,M_salary:10000.0
name:Black,age:30,salary:8000.0 M_name:John,M_age:40,M_salary:20000.0
C:\javastudy>
发表评论
-
云时代,Java程序猿们何去何从
2018-01-18 18:59 993欢迎关注微信公众 ... -
java编程中的缺省时区问题
2017-06-10 12:56 1074java编程的过程中,一般都会用到日期时间的处理,既然涉及到时 ... -
调查问卷动态生成的一点探索
2017-02-27 16:32 1905之前做过企业内部用的调查问卷系统,因为每一年的调查内容都有 ... -
spring和mybatis的整合方式
2017-02-27 14:30 18291.Dao类继承org.mybatis.spring.sup ... -
struts和spring的整合方式对比
2017-02-27 09:51 12161.业务Action类继承ActionSupport类 ... -
java mail发送邮件
2017-02-23 16:14 1090业务场景 在公司内部的linux主机上,通过 ... -
Linux环境下java程序获取oracle数据库连接超时的问题解决
2017-02-23 14:29 4536Linux下运行java程序(jdk ... -
一个Java swing桌面应用程序的JVM内存调优
2017-02-22 15:58 1131背景介绍 用java swing(jdk ... -
Tomcat 7源码学习笔记 -8 Filter过滤器解读
2012-11-29 16:15 69591.过滤器的主要功能是允许我们在request转给某个资源之前 ... -
synchronized关键字实现信号量同步功能
2012-11-22 09:55 1806下面的代码,不加mys.acquire();和mys.rele ... -
Tomcat 7源码学习笔记 -4 encoding的处理机制
2012-11-02 15:15 2822一.概述 Tomcat对http请求的字符编码支持得有些混乱 ... -
Tomcat 7源码学习笔记 -3 Http11Protocol和Http11NioProtocol
2012-10-30 23:12 9149Tomcat既支持阻塞式IO,也支持非阻塞式IO。 如果要使 ... -
Tomcat 7源码学习笔记 - 2 (socket接入后的处理)
2012-10-29 07:30 1769前一篇文章写到SocketProcessor的run方法,这次 ... -
Tomcat 7源码学习笔记 - 1 (socket多线程)
2012-10-28 22:58 3012tomcat说白了就是一个socket服务线程,监听8080端 ... -
JVM远程调试为什么要禁用JIT -Djava.compiler=NONE
2012-10-23 17:12 4783为了加快debug的速度。 首先,需要了解JVM对字节码的 ... -
插件的简单开发原理
2012-10-23 14:31 1801以java语言举例来说吧。要想实现插件,基本要符合下面几点要求 ... -
装饰模式
2012-10-23 13:37 1540装饰模式相当于搭积木,首先有一个接口,很多个类都遵从相同的接口 ... -
java file io 复制文件
2010-11-07 17:55 25421.功能:复制test.txt文件 ... -
Java多线程
2010-07-21 06:53 1189什么是线程 线程是程序代码的一部分,可以在程序里独立 ... -
Java中的集合-Collections类
2010-07-18 20:49 1157Collections不是一个集合,它是一个继承了Object ...
相关推荐
java克隆技术的入门及深入研究,帮助读者更好的理解java克隆技术,掌握关键知识点。
克隆技术在处理复杂数据结构、避免对象共享以及实现对象复制等方面有着广泛的应用。Java提供了两种主要的克隆方式:深克隆和浅克隆。 1. 浅克隆(Shallow Clone): 浅克隆是通过调用对象的`clone()`方法来实现的,...
在Java编程语言中,克隆和序列化是两个重要的概念,它们在数据处理和对象管理中扮演着关键角色。下面将分别对这两个概念进行详细解释,并结合实例和源代码进行阐述。 **一、克隆** 1. **克隆定义**:克隆是指创建...
4. **命令模式**:在实现命令模式时,为了记录命令执行前后的状态变化,可以使用深度克隆技术来保存命令执行前的状态。 综上所述,Java中的深度克隆是一种非常实用的技术,在很多场景下都有着广泛的应用。通过理解...
031111_【第11章:Java常用类库】_对象克隆技术笔记
对于复杂的对象结构,可以使用序列化和反序列化技术来实现深克隆。首先,将对象序列化为字节数组,然后反序列化为新的对象。这种方法可以确保所有引用类型的对象也被复制。 ```java import java.io.*; public ...
在Java编程语言中,克隆是一种创建对象副本的技术,它允许我们复制一个对象的状态而不影响原始对象。克隆主要用于创建对象的备份、实现复制功能或者在多线程环境中避免共享状态。Java提供了两种主要的克隆方式:浅...
深度克隆,也称为完全克隆,是一种创建新对象的技术,这个新对象不仅包含原始对象的所有属性值,还包含了嵌套对象的完整副本。这意味着如果一个对象中包含了其他对象的引用,深度克隆会创建这些引用对象的独立副本,...
在Java开发领域,掌握核心知识点对于应对技术面试至关重要。根据提供的文件内容,我们可以提炼出一些关键的面试要点,并详尽地探讨它们。 首先,Java中所有类的父类是Object类。这是Java语言继承体系的基础,所有的...
Java2核心技术第I卷.基础知识 目录: 译者序 前言 第1章Java程序设计概述 1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语 1.2.1简单性 1.2.2面向对象 1.2. 3分布式 1. 2.4健壮性 1. 2.5安仝...
深入探索Java对象的克隆技术,对于每一个热衷于掌握Java编程语言的开发者来说,都是一个值得投入精力的研究领域。克隆技术在Java对象中扮演着重要角色,它让对象的复制成为可能,而这种复制方式与简单的赋值操作大有...
Java求职面试指南还提到了Java的高级特性,比如序列化与反序列化,以及Java实现浅克隆与深克隆的机制。这些特性在实际的项目开发中非常关键,面试官往往会对这些知识点进行考察。求职者应该对如何处理Java对象的序列...
Java到Python的转换工具,如标题“java2python”所示,是编程领域中的一种实用技术,旨在帮助开发者将已有的Java代码转换为Python语言。这种转换对于那些熟悉Java但希望进入Python生态系统,或者想要利用Python特定...
除此之外,本指南还涉及到了Collection与Collections的区别、IO与NIO的区别、Java中如何实现浅克隆与深克隆以及枚举类型是否可以序列化等问题。每个知识点的解释都不会过于深入,而是倾向于提供快速复习的要点,帮助...
在 Java 编程中,对象克隆是一种非常重要的技术,它允许开发者创建一个对象的副本,具有相同的属性和行为。对象克隆可以分为浅克隆和深克隆,浅克隆仅复制对象的引用,而深克隆则复制对象的所有属性。 对象克隆的...