现在有User类:(Getter和Setter省略)

  1. public class User implements Cloneable {
  2.  
  3. private String name;
  4. private int age;
  5. private User user;
  6.  
  7. @Override
  8. public User clone() {
  9. try {
  10. return (User) super.clone();
  11. } catch (CloneNotSupportedException e) {
  12. }
  13. return null;
  14. }
  15. }

为了测试clone方法:

  1. public class MainTest {
  2. public static void main(String[] args) {
  3. User prop = new User();
  4. prop.setName("prop");
  5.  
  6. User user1 = new User();
  7. user1.setName("user1-name");
  8. user1.setAge(10);
  9. user1.setUser(prop);
  10.  
  11. User user2 = user1.clone();
  12. user2.setName("user2-name");
  13. user2.setAge(20);
  14. user2.getUser().setName("object change");
  15.  
  16. System.out.println(user1.getName());
  17. System.out.println(user1.getAge());
  18. System.out.println(user1.getUser().getName());
  19.  
  20. System.out.println(user2.getName());
  21. System.out.println(user2.getAge());
  22. }
  23. }

打印:

user1-name
10
object change
user2-name
20

实测证明:

1、对象要被Clone,必须implements Cloneable接口,否则运行时会报CloneNotSupportedException异常

2、对象的primitive成员变量和String成员变量是深复制,对user2的修改,不影响user1原来的值

3、对象的一般Object属性,只是浅复制,user1和user2的user成员变量引用的是堆上的同一个对象。

Java的clone方法的更多相关文章

  1. Java基础——clone()方法浅析

    一.clone的概念 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...

  2. Java的clone方法效率问题

    在Java中,经常会需要新建一个对象,很多情况下,需要这个新建的对象和现有的某个对象保持属性一致. 那么,就有两种方式来实现这个对象的构造: ①通过新建一个对象,为这个对象的属性根据原有对象的属性来进 ...

  3. 分析java中clone()方法 (转载+修改)

    Java中的clone() 方法 java所有的类都是从java.lang.Object类继承而来的,而Object类提供下面的方法对对象进行复制. protected native Object c ...

  4. Java中clone方法的使用

    什么是clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象object1,在某一时刻object1中已经包含了一些有效值,此时可能会需要一个和object1完全相同新对象object2,并 ...

  5. java的clone()方法

    什么是"clone"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都 ...

  6. Java 的 clone 方法 && 浅复制和深复制

    1 Java中对象的创建过程 java创建对象的方式有以下两种: (1)使用new操作符创建一个对象 (2)使用clone的方法复制一个对象,(在Java中,clone是Object类的protect ...

  7. java的 clone方法

    1.java语言中没有明确提供指针的概念与用法,而实质上每个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如果取操作这个指针而已. 2.在java中处理基本数据类型时,都是 ...

  8. 详解Java中的clone方法

    详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...

  9. Object类clone方法的自我理解

    网上搜帖: clone()是java.lang.Object类的protected方法,实现clone方法: 1)类自身需要实现Cloneable接口 2)需重写clone()方法,最好设置修饰符mo ...

随机推荐

  1. mongoDB 安装过程

    1.在官方网站下载 mongoDB的安装包,我下载的是3.4.6  系统为win10_64 2.需要安装vc++2015 在安装时发现 win7 系统安装不了. 不得已才安装的win10 3.安装mo ...

  2. Eclipse使用git发布项目到github

    因为一直都在使用svn,今天尝试了下git,记录下来既是方便自己以后查看,也是分享一些经验! 废话不多说,撸起袖子就是干!!! 1.选中要上传的项目右键 2.选中git 3.在图上打钩,点击所要上传的 ...

  3. openstack共享组件--rabbitmq消息队列(1)

    一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...

  4. 內部作业 OH01 0001710000 无价格可确定

    在CO15报工时,提示:“內部作業 OH01 0001710000 無價格可確定” 出现以上错误信息,表示没有在KP26维护价格, 只需要进入KP26维护成本中心和作业类型的价格即可, 具体操作如下图 ...

  5. WPF 非UI线程更新UI界面的各种方法小结

    转载:https://www.cnblogs.com/bdbw2012/articles/3777594.html 我们知道只有UI线程才能更新UI界面,其他线程访问UI控件被认为是非法的.但是我们在 ...

  6. ubuntu查看目录大小

    du -h --max-depth=1 该命令会查看目录下的所有子目录大小,以及目录总共占用磁盘空间

  7. filter_var()函数

    我们使用 payload :?url=javascript://comment%250aalert(1) ,可以执行 alert 函数: 实际上,这里的 // 在JavaScript中表示单行注释,所 ...

  8. ASP.NET Session详解(转)

    ASP.NET Session详解 本文章来自:http://blog.163.com/adam601@126/blog/static/22506317200932824210996/ 当用户在 We ...

  9. 企业微信 PC端多开

    企业微信,正常情况下一个PC端只能登一个账号.现在多个人共用一个外网机,需要在一个电脑上登录多个账号.解决办法如下: 下载process explorer.exe,使用管理员权限运行,找到WXWork ...

  10. Diameter of Binary Tree

    Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...