文档章节

java clone

WolvesLeader
 WolvesLeader
发布于 2014/06/04 23:08
字数 372
阅读 112
收藏 4
浅克隆:自定义的类型不能够克隆

package com.quincy.clone;
/**
 * 思念是种痛,
 * 倚楼听风雨,
 * 淡看江湖路,
 * 但见泪痕湿,
 * 不知心恨谁
 * @author Quincy
 *
 */
public class MyClone {
 public static void main(String[] args) {
  User user = new User();
  user.setName("quincy");
  user.setAge(25);
  
  User cloneUser= null;
  try {
   cloneUser = (User)user.clone();
   
   System.out.println(cloneUser.getName());
   System.out.println(cloneUser.getAge());
   System.out.println("================");
   cloneUser.setName("miao");
   cloneUser.setAge(24);
   
   System.out.println(cloneUser.getName());
   System.out.println(cloneUser.getAge());
   System.out.println(cloneUser == user);
   
   //不相同的原因是对User类的equals方法没有重写
   System.out.println(cloneUser.equals(user));
   
  } catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
 }
}
class User implements Cloneable{
 private String name;
 private int age;
 
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 @Override
 //一定要设置为public 
 public Object clone() throws CloneNotSupportedException {
  //一定要调用super.clone()
  return super.clone();
 }
} 

深克隆:自定义的类型也可以克隆
package com.quincy.clone;
/**
 * 深度克隆
 * @author Quincy
 *
 */
public class DepClone {
 
    public static void main(String[] args) {
       People p = new People();
       p.setAge(30);
       p.setName("people");
       
       User2 user2 = new User2();
       user2.setAge(12);
       user2.setName("user2");
       user2.setPeople(p);
       
       
       try {
    User2 u2 = (User2)user2.clone();
    System.out.println(u2.getAge());
    System.out.println(u2.getName());
    
    p.setName("clone ");
    System.out.println(u2.getPeople() == p);
    System.out.println(u2.getPeople().getName());
    System.out.println(u2.getPeople().getAge());
   } catch (CloneNotSupportedException e) {
    
    e.printStackTrace();
   }
 }
}
class User2 implements Cloneable{
 private int age;
 private String name;
 private People people;
 
 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 People getPeople() {
  return people;
 }
 public void setPeople(People people) {
  this.people = people;
 }
    //重写clone()方法
 @Override
 public Object clone() throws CloneNotSupportedException {
  User2 user2 = (User2)super.clone();
  user2.setPeople((People)user2.getPeople().clone());
  return user2;
 }
}
class People 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;
 }
 
 @Override
 public Object clone() throws CloneNotSupportedException {
  // TODO Auto-generated method stub
  return super.clone();
 }
 
}

© 著作权归作者所有

共有 人打赏支持
WolvesLeader
粉丝 0
博文 8
码字总数 5763
作品 0
宝鸡
程序员
私信 提问
java clone方法使用详解

Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,特别是先学c、c++后学java的程序员。并且由于Java不能通过简单的赋值来解决对象复制的问...

丁佳辉
2015/08/14
0
0
对象的复制(clone、序列化)

那就先看是clone方法复制对象 摘自 java.lang.Object.clone()分析 首先,看一下源码: public class Object { protected native Object clone() throws CloneNotSupportedException; }   由......

成长中的菜鸟
2015/02/13
0
0
JAVA 对象引用,以及对象赋值

关键字: java对象 引用 Java对象及其引用 关于对象与引用之间的一些基本概念。 有了这个模板,就可以用它来创建对象: 通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作。 ...

happy圈圈
2014/04/23
0
0
Java拾遗:008 - 对象克隆与浅拷贝、深拷贝

对象克隆 Object类中有一个方法叫,完整代码 首先它是一个Native方法,而且是受保护的(),抛出一个异常(JDK1.8)。 通常程序员自己定义的类不能直接调用方法,如果要在外部调用,需要重写...

一别丶经年
08/04
0
0
叮!您收到一份超值Java基础入门资料!

摘要:Java语言有什么特点?如何最大效率的学习?深浅拷贝到底有何区别?阿里巴巴高级开发工程师为大家带来Java系统解读,带你掌握Java技术要领,突破重点难点,入门面向对象编程,以详细示例...

聒小小噪
05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

php获取客户端IP

php获取客户端IP 首先先阅读关于IP真实性安全的文章:如何正確的取得使用者 IP? 「任何從客戶端取得的資料都是不可信任的!」 HTTP_CLIENT_IP头是有的,但未成标准,不一定服务器都实现。 ...

DrChenXX
13分钟前
0
0
. The valid characters are defined in RFC 7230 and RFC 问题

通过这里的回答,我们可以知道: Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom...

west_coast
31分钟前
1
0
刷leetcode第704题-二分查找

今天双十一买的算法书到货了,路上刷到有人说的这个题,借(chao)鉴(xi)一下别人的思路,这个是C++标准库里面的经典方法,思路精巧,优雅好品味 int search(int* nums, int numsSize, in...

锟斤拷烫烫烫
56分钟前
1
0
【分享实录】BANCOR算法详解及代码实现

1 活动基本信息 1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现 2)议题: BANCOR算法的特点和优劣势 BANCOR算法和举例 如何加入BANCOR.NETWORK交易所 如何开发自己的BANCOR去中心...

HiBlock
今天
2
0
微信小程序(2)

开始看微信小程序的教程了。刚刚看完官方教程的视图层部分。这里摘录一些自己认为的部分关键点。 1.直接修改数值无法重新渲染,需要使用setData()方法; 2.列表渲染中:wx:key用于保持项目在...

MKjy
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部