文档章节

java clone

WolvesLeader
 WolvesLeader
发布于 2014/06/04 23:08
字数 372
阅读 111
收藏 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 build mongodb driver

git bash here $ cd /c/s $ git clone https://github.com/mongodb/mongo-java-driver.git (记得打开FQ工具,不然很慢) $ cd mongo-java-driver/ 最后是编译,这个工程支持用ant, maven, 或gra......

cyper
2014/05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis应用之分布式锁(set)

Redis应用之分布式锁(set) 在单机应用的场景下,我们常使用的锁主要是synchronized与Lock;但是在分布式横行的大环境下,显然仅仅这两种锁已经无法满足我们的需求; 需求:秒杀场景下,有若干...

GMarshal
21分钟前
0
0
python实现简单的文件加密与解密

对于任意的一个文件,本质上来讲都是二进制的。 对于任意一个二进制数a,对其用另外任意一个与a的位数相同的二进制数m进行“异或”操作得到结果e,即e=a xor m; 如果再讲上面得到的e用m进行...

Aomo
22分钟前
0
0
Android开发应用程序生成以太坊钱包

Android应用程序以太坊钱包生成,要做的工作不少,不过如果我们一步一步来应该也比较清楚: 1.在app/build.gradle中集成以下依赖项: compile ('org.web3j:core-android:2.2.1') web3j核心是...

geek12345
37分钟前
0
0
ArrayList嘿嘿嘿

数组扩容技术: //扩容技术 将原数组objs类容复制到新数组并且长度为11 Object[] newObjs = Arrays.copyOf(objs,11); 数组比较大那么System.arraycopy比较有优势,因为其使用的是内存复制,省...

熊猫你好
今天
2
0
Android平台下的一个好用的日历库(sxtwl_cpp),支持农历转公历,和公历转农历等功能

python版的sxtwl_cpp传送入口 在build.gradle的allprojects中加入 maven { url 'https://dl.bintray.com/yuangu/sxtwl' } 最终如下面代码所示: allprojects { repositories { ......

元谷
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部