文档章节

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
Java拾遗:008 - 对象克隆与浅拷贝、深拷贝

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

一别丶经年
2018/08/04
0
0
对象的复制(clone、序列化)

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

成长中的菜鸟
2015/02/13
0
0
如何与shell交互

因为批量部署客户端需要执行git clone命令实现自动化,在客户端ubuntu上我用java runtime执行git clone命令,纠结的是需要输入密码,貌似java无法跟shell交互,尝试sh脚本也不行,有什么解决...

Photon
2014/09/15
965
8
叮!您收到一份超值Java基础入门资料!

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

聒小小噪
2018/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark in action on Kubernetes - Playground搭建与架构浅析

前言 Spark是非常流行的大数据处理引擎,数据科学家们使用Spark以及相关生态的大数据套件完成了大量又丰富场景的数据分析与挖掘。Spark目前已经逐渐成为了业界在数据处理领域的行业标准。但是...

阿里云官方博客
2分钟前
0
0
小白大数据学习路线

学习大数据首先了解大数据技术得板块划分: 数据计算(离线计算):Hadoop、spark 数据计算(实时计算):storm、spartstreaming、flink 其他框架:zookeeper 数据采集:flume、Kafka 数据存...

董黎明
14分钟前
0
0
mariadb 内存占用优化

本文由云+社区发表 作者:工程师小熊 摘要:我们在使用mariadb的时候发现有时候不能启动起来,在使用过程中mariadb占用的内存很大,在这里学习下mariadb与内存相关的配置项,对mariadb进行调...

腾讯云加社区
57分钟前
2
0
spring security 自定义登录认证

spring security 自定义认证登录 1.概要 1.1.简介 spring security是一种基于 Spring AOP 和 Servlet 过滤器的安全框架,以此来管理权限认证等。 1.2.spring security 自定义认证流程 1)认证...

EasyProgramming
57分钟前
1
0
Win下Jenkins-2.138源码编译及填坑笔记

源码编译篇 1、 安装JDK1.8-181,操作系统添加JDK环境变量。Java -version验证一下。 注:Jenkins2.138版本,JDK必须jkd1.8.0-101以上,不支持Java9,Maven必须3.5.3以上。 2、 解压Maven3....

编程SHA
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部