- 浏览: 220547 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
kandari:
很全,收藏
oracle相关知识 -
若见三生石:
,辛苦楼主!感谢为大伙敏捷开发做出贡献!
Oracle中的二进制、八进制、十进制、十六进制相互转换函数 -
若见三生石:
你好,要定义的类和类型怎么写呢?
Oracle中的二进制、八进制、十进制、十六进制相互转换函数 -
greatwqs:
...
PLSQL操作文件 -
sun17921:
var areaCode ={11:"北京" ...
身份证验证JS
http://zzqrj.iteye.com/blog/572562
浅复制(浅克隆) : 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍。
Java 中对象的克隆 , 为了获取对象的一份拷贝,我们可以利用 Object 类的 clone() 方法。必须要遵循下面三点
1. 在派生类中覆盖基类的 clone() 方法,并声明为 public 【 Object 类中的 clone() 方法为 protected 的】。
2. 在派生类的 clone() 方法中,调用 super.clone() 。
3. 在派生类中实现Cloneable 接口。
Object 类里的 clone 方法是浅复制(浅克隆)
浅复制:
- public class CloneTest {
- public static void main(String[] args) throws CloneNotSupportedException {
- Teacher teacher=new Teacher();
- teacher.setAge(40 );
- teacher.setName("Teacher Zhang" );
- Student student1=new Student();
- student1.setAge(20 );
- student1.setName("zhangsan" );
- student1.setTeacher(teacher);
- Student student2=(Student)student1.clone();
- System.out.println(student2.getAge());
- System.out.println(student2.getName());
- System.out.println(student2.getTeacher().getAge());
- System.out.println(student2.getTeacher().getName());
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- student2.setAge(18 );
- student2.getTeacher().setAge(50 ); //浅复制针对对象的引用没有重新开辟新的空间
- student2.getTeacher().setName("Teacher Li" ); //改变值后相应的都改变
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getAge());
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- }
- }
- class Teacher{
- private int age;
- private String name;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- }
- class Student implements Cloneable{
- private int age;
- private String name;
- private Teacher teacher;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- public Teacher getTeacher() { return teacher;}
- public void setTeacher(Teacher teacher) { this .teacher = teacher;}
- public Object clone() throws CloneNotSupportedException{
- return super .clone();
- }
- }
public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Teacher teacher=new Teacher(); teacher.setAge(40); teacher.setName("Teacher Zhang"); Student student1=new Student(); student1.setAge(20); student1.setName("zhangsan"); student1.setTeacher(teacher); Student student2=(Student)student1.clone(); System.out.println(student2.getAge()); System.out.println(student2.getName()); System.out.println(student2.getTeacher().getAge()); System.out.println(student2.getTeacher().getName()); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); student2.setAge(18); student2.getTeacher().setAge(50);//浅复制针对对象的引用没有重新开辟新的空间 student2.getTeacher().setName("Teacher Li"); //改变值后相应的都改变 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getAge()); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); } } class Teacher{ private int age; private String name; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} } class Student implements Cloneable{ private int age; private String name; private Teacher teacher; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Teacher getTeacher() {return teacher;} public void setTeacher(Teacher teacher) {this.teacher = teacher;} public Object clone()throws CloneNotSupportedException{ return super.clone(); } }
深复制:
- public class DeepCloneTest {
- public static void main(String[] args) throws CloneNotSupportedException {
- Teacher teacher = new Teacher();
- teacher.setAge(40 );
- teacher.setName("Teacher Zhang" );
- Student student1 = new Student();
- student1.setAge(20 );
- student1.setName("zhangsan" );
- student1.setTeacher(teacher);
- Student student2 = (Student) student1.clone();
- System.out.println(student2.getAge());
- System.out.println(student2.getName());
- System.out.println(student2.getTeacher().getAge());
- System.out.println(student2.getTeacher().getName());
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- student2.setAge(18 );
- student2.getTeacher().setAge(50 ); //浅复制针对对象的引用没有重新开辟新的空间
- student2.getTeacher().setName("Teacher Li" ); // 改变值后相应的都改变
- System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~" );
- System.out.println(student1.getAge());
- System.out.println(student1.getTeacher().getAge());
- System.out.println(student1.getTeacher().getName());
- }
- }
- class Teacher implements Cloneable {
- private int age;
- private String name;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- public Object clone() throws CloneNotSupportedException {
- return super .clone();
- }
- }
- class Student implements Cloneable {
- private int age;
- private String name;
- private Teacher teacher;
- public int getAge() { return age;}
- public void setAge( int age) { this .age = age;}
- public String getName() { return name;}
- public void setName(String name) { this .name = name;}
- public Teacher getTeacher() { return teacher;}
- public void setTeacher(Teacher teacher) { this .teacher = teacher;}
- public Object clone() throws CloneNotSupportedException {
- Student student = (Student) super .clone();
- student.setTeacher((Teacher) (student.getTeacher().clone()));
- return student;
- }
- }
public class DeepCloneTest { public static void main(String[] args) throws CloneNotSupportedException { Teacher teacher = new Teacher(); teacher.setAge(40); teacher.setName("Teacher Zhang"); Student student1 = new Student(); student1.setAge(20); student1.setName("zhangsan"); student1.setTeacher(teacher); Student student2 = (Student) student1.clone(); System.out.println(student2.getAge()); System.out.println(student2.getName()); System.out.println(student2.getTeacher().getAge()); System.out.println(student2.getTeacher().getName()); System.out.println("~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); student2.setAge(18); student2.getTeacher().setAge(50); //浅复制针对对象的引用没有重新开辟新的空间 student2.getTeacher().setName("Teacher Li"); // 改变值后相应的都改变 System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~"); System.out.println(student1.getAge()); System.out.println(student1.getTeacher().getAge()); System.out.println(student1.getTeacher().getName()); } } class Teacher implements Cloneable { private int age; private String name; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Object clone() throws CloneNotSupportedException { return super.clone(); } } class Student implements Cloneable { private int age; private String name; private Teacher teacher; public int getAge() {return age;} public void setAge(int age) {this.age = age;} public String getName() {return name;} public void setName(String name) {this.name = name;} public Teacher getTeacher() {return teacher;} public void setTeacher(Teacher teacher) {this.teacher = teacher;} public Object clone() throws CloneNotSupportedException { Student student = (Student) super.clone(); student.setTeacher((Teacher) (student.getTeacher().clone())); return student; } }
发表评论
-
spring事件驱动
2014-03-07 00:53 584http://jinnianshilongnian.ite ... -
Java NIO API
2012-02-23 08:52 904http://www.blogjava.net/1985198 ... -
Threadlocal提供一个独立的变量副本
2012-02-21 14:15 1156ThreadLocal是解决线程安全问题一个很好的思 ... -
MD5 Base64
2012-02-03 11:09 1096哈希函数:MD5,SHA 是没有密钥的,相当与指纹的概念,因此 ... -
HTTP详细描述
2012-02-01 09:00 793原文:http://www.cnblogs.com ... -
include与jsp:include区别
2012-02-01 08:58 898一:执行时间上: <%@ include fi ... -
session与cookie
2010-04-23 14:32 726一、cookie机制和session机制的区别 具体来说 ... -
OGNL“valueStack”
2009-12-30 16:21 958详细例子:http://www.iteye.com/wiki/ ... -
servlet单实例多线程
2009-12-23 22:36 2007一,servlet容器如何同时处理多个请求。 Servlet ... -
JDBC事务、JTA事务
2009-12-23 22:27 1443一般情况下,J2EE应用服务器支持JDBC事务、JTA事务、容 ... -
forword的redirect属性
2009-12-23 20:57 1750Forward高, Redirect低, 因为Redirec ... -
JDBC连接数据库
2009-12-23 18:21 763使用JDBC连接数据库的步骤如下: (1)首先要在应用程序中 ... -
final和static
2009-12-23 18:05 1138一、final 根据程序上下 ... -
log4j详述
2009-12-18 10:09 666http://www.iteye.com/topic/3780 ... -
java文件上传(Cos和FileUpload和SmartUpload)
2009-12-15 21:28 3480SmartUpload上传专题:http://thousa ... -
IS08583报文协议(理论)
2009-12-12 17:11 1229单纯的讲IS08583 ... -
Socket上的实时交流
2009-12-12 14:59 1494第一步 充分理解Socket 1.什么是socket ... -
java Socket透析http协议
2009-12-12 14:38 1545WWW是以Internet作为传输媒介的一个应用系统,WWW网 ... -
socket理论
2009-12-12 14:22 8921.什么是socket 所谓socket ... -
JKD1.5的多线程启动socket实例
2009-12-11 10:17 1058import java.io.*; import java. ...
相关推荐
今天小编就为大家分享一篇关于Java Clone深拷贝与浅拷贝的两种实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
Java Clone(类的复制)实例代码 Java Clone(类的复制)实例代码
Java克隆(Clone)是Java语言的特性之一,本篇文章主要介绍了Java中的Clone机制是如何工作的,需要的朋友可以参考下
java设计模式【之】原型模式、深拷贝与浅拷贝【源码】【场景:克隆羊】 * 原型模式(Prototype) * 实现方式: * 需要被克隆的 class类, 重写Object中的clone()方法,并实现Cloneable接口(否则报错 ...
浅拷贝(浅复制、浅克隆)、深拷贝(深复制、深克隆)实战工程,IDEA搭建
主要介绍了Java中的数组复制(clone与arraycopy)代码详解,本文并未全部介绍数组复制的几种方式,仅对clone和copy的相关内容进行了解析,具有一定参考价值,需要的朋友可以了解下。
主要介绍了Java 数组复制clone方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。下面通过本文给大家介绍java中的clone方法,感兴趣的朋友一起看看吧
clone顾名思义是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建...
java中仅有的创建对象的两种方式:①.使用new操作符创建对象...使用clone方法复制对象。下面这篇文章主要通过JVM角度给大家详细谈谈Java的clone操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
在Java语言中,一般会采用下面的几种方法进行数组的复制。 a) for循环逐一复制; b) System.arraycopy()方法 c) Arrays.copyOf()方法 d) 使用clone()方法 e) Arrays.copyOfRange()方法 接下来,我们看下这几种方法...
直接使用 “=” 复制,浅拷贝,两个数组地址一样,改变其中一个,另一个也变化 int[] a1 = {1, 2,3}; int[] a2 = a1; a1[0] = 0; System.out.println(Arrays.toString(a1)); //[0,2,3] System.out.println(Arrays....
并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象。比如函数参数类型是自定义的类时,此时便是引用传递而不是值传递。以下是一个小例子: ...
1 JAVA认识 2 JAVA数据类型 3 面向对象程序设计 4 JAVA集合 5 JAVA反射机制 6 JAVA注解(ANNOTATION) 7 JAVA中的异常类 ...20 JAVA克隆CLONE(复制) 21 JAVA 网络编程 22 JAVA 其他未归类 23 JNI概述
15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2 程序片 15.6.3 用C++写的CGI程序 15.6.4 POST的概念 15.7 用JDBC连接数据库 15.7.1 获得学习示例 15.7.2 查找程序的GUI版本 15.7.3 JDBC API为何如何复杂 15.8 ...
15.6 Java与CGI的沟通 15.6.1 CGI数据的编码 15.6.2 程序片 15.6.3 用C++写的CGI程序 15.6.4 POST的概念 15.7 用JDBC连接数据库 15.7.1 获得学习示例 15.7.2 查找程序的GUI版本 15.7.3 JDBC API为何如何复杂 15.8 ...