java拷贝--clone】的更多相关文章

大纲: java如何拷贝对象. 浅拷贝 深拷贝 一.java如何拷贝对象 Person p = new Person(); Person p2 = p; 上例并不是一个拷贝操作,只是把p对象的引用赋给了p2,2个变量指向了同一片heap地址. 想实现拷贝操作需要做2件事情: (1)实现Cloneable接口,这是一个空接口不用重写任何方法. public interface Cloneable {} (2)重写clone方法,注意clone方法是Object类中的native方法,并不是Clon…
一.clone的概念 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那么在java语言中,有几种方式可以创建对象呢? 使用new操作符创建一个对象 使用clone方法复制一个对象 那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存.程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间.分配完内存之后,再…
Java中的clone() 方法 java所有的类都是从java.lang.Object类继承而来的,而Object类提供下面的方法对对象进行复制. protected native Object clone() throws CloneNotSupportedException; 这个javabean必须实现一个标识接口,Cloneable,表明这个javabean支持复制,如果没有实现这个接口,而调用clone()方法,编译器就会抛出CloneNotSupportedException异常.…
Java中Clone的概念大家应该都很熟悉了,它可以让我们很方便的“制造”出一个对象的副本来,下面来具体看看java中的Clone机制是如何工作的?      1. Clone和Copy      假设现在有一个User对象,User u1=new User(“U1001”,“Jason”,25),通 常我们会有这样的赋值User u2=u1,这个时候只是简单了copy了一下reference,u2和u1都指向内存中同一个object,这样u2或者u1的一个操作都可能影响到对方.打个比方,如果我…
什么是clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象object1,在某一时刻object1中已经包含了一些有效值,此时可能会需要一个和object1完全相同新对象object2,并且此后对object2任何改动都不会影响到object1中的值,也就是说,object1与object2是两个独立的对象,但object2的初始值是由object1对象确定的.在Java语言中,用简单的赋值语句是不能满足这种需 求的.要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单…
在Java中,经常会需要新建一个对象,很多情况下,需要这个新建的对象和现有的某个对象保持属性一致. 那么,就有两种方式来实现这个对象的构造: ①通过新建一个对象,为这个对象的属性根据原有对象的属性来进行赋值 ②调用clone方法,来实现实例对象的克隆 对于Java的clone方法,需要注意的就是它实际上是一种“浅克隆”(Shallow Clone),对于int.double这种基本数据类型,直接拷贝值:对于String这样的类对象,则是直接拷贝引用.因此对于通过clone得到的对象来说,它很大程…
Java Object Clone User user = new User(); user.setName("tom"); User user1 = new User(); user1.setName("jerry"); List<User> list = new ArrayList<>(); list.add(user1); user.setChildren(list); user.setUser(user1); System.out.p…
Javascript对象拷贝(clone),希望大家给点建议​1. [代码]方法代码 function cp(source, target) {    function isBaseType(v) {        var type = typeof v;        var basetype = {            "string": true,            "number": true,            "boolean&quo…
1.java拷贝字符文件 2.代码如下: package Demo1; import java.io.*; public class copyfile { public static void main(String[] args) { try { cp(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void cp() throws IO…
java 中的 拷贝分为浅拷贝 和 深拷贝 浅拷贝需要实现Cloneable接口,深拷贝需要实现Serializable接口. public class Square implements Cloneable, Serializable { private Point location = new Point(0, 0); private float sideLength = 1F; @Override public Object clone() { Square tmp = null; try…
什么是"clone"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的.在 Java语言中,用简单的赋值语句是不能满足这种需求的.要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段. Java的所有类都默认继承java.lang.Object类,在java.lan…
1 Java中对象的创建过程 java创建对象的方式有以下两种: (1)使用new操作符创建一个对象 (2)使用clone的方法复制一个对象,(在Java中,clone是Object类的protected方法) 这两种对象创建方法有什么区别? new操作时,首先根据new后面的类型(知道类型才能判断需要分配多大的内存空间)分配内存空间(此时分配到的内存空间相当于产生了一个新的对象,只是还有初始化),分配完内存空间后,在调用构造函数,初始化对象(填充对象的各个域的值).构造方法返回后,一个对象创建…
Cloneable这个接口设计得十分奇葩,不符合正常人的使用习惯,然而用这个接口的人很多也很有必要,所以还是有必要了解一下这套扭曲的机制.以下内容来自于对Effective Java ed 2. item 11的整理. Cloneable接口 首先,Cloneable接口中并没有方法.它的存在意义一是让程序员注明当前对象可以clone,二是改变父类Object类中clone方法的行为:如果某个类实现了Cloneable,那么它的父类Object的clone方法可以调用,否则会抛出CloneNot…
clone()方法的约定 首先明确的是clone()是object的方法.Cloneable接口没有任何方法,它只起到标识的作用.(java的原型模式有用到) Cloneable接口的目的是作为对象的一个混合接口,表明这样的对象允许克隆(clone),但是这个接口却没有定义clone(),这是它的缺陷:无法约束子类实现clone()方法. Object定义了一个受保护的clone()方法.Cloneable虽然没有定义clone()方法,但是却影响了Object.clone()方法的行为:如果一…
clone()方法是Object的native方法.protected native Object clone() throws CloneNotSupportedException;  声明为protected,表明子类必须重新实现该方法,除非是与Obeject类在一个包里,后者是不可能的.而实际上,作为native方法clone()已经有一份field to field的浅拷贝实现,实际上是不需要一定重写的.这种情况下,需要的做法就是覆写clone()方法,在方法里通过super.clone…
本文转载自:http://blog.csdn.net/mengxiangyue/article/details/6818611 Java中我们可能都遇到过这样的情况,在我们将一个对象做为参数传给一个函数的时候,我们希望在这个函数中所做的操做,并不会影响到这个对象本身.但是在java传递都是引用,所以往往我们在函数内部改变了对象的某一个值,在函数外面调用该对象的时候,相应的值也同样被改变了,例如下面的程序: class Test { static void myMethod(Point pt1)…
深拷贝和浅拷贝 值类型 vs 引用类型 在Java中,像数组.类Class.枚举Enum.Integer包装类等等,就是典型的引用类型,所以操作时一般来说采用的也是引用传递的方式: 但是Java的语言级基础数据类型,诸如int这些基本类型,操作时一般采取的则是值传递的方式,所以有时候也称它为值类型. 为了便于下文的讲述和举例,我们这里先定义两个类:Student和Major,分别表示「学生」以及「所学的专业」,二者是包含关系:   // 学生的所学专业 public class Major {…
之前http://www.cnblogs.com/lhppom/p/4857702.html里有提到关于Java的深克隆的学习,深浅区别就是在于仅复制对象引用和复制对象引用所指向的对象,最近在看<Java核心技术卷1>时,看到其中一个克隆的例子,这里再做个补充,其实现克隆的方式就是将对象中除数值或基本类以外的域再进行克隆,然后将引用给到新克隆的对象中所对应的域: public class Pet implements Cloneable{ String name; public Pet(Str…
1.java语言中没有明确提供指针的概念与用法,而实质上每个new语句返回的都是一个指针的引用,只不过在大部分情况下开发人员不需要关心如果取操作这个指针而已. 2.在java中处理基本数据类型时,都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是按值引用传递(传递的是对象的一个引用)的方式进行.除了在函数调用时是引用传递,在使用=复制时也是采用引用传递. 实现 package cloneDemo; import java.util.Date; public class…
1. Clone&Copy 假设现在有一个Employee对象,Employee tobby =new Employee(“CMTobby”,5000),通常我们会有这样的赋值Employee cindyelf=tobby,这个时候只是简单了copy了一下reference,cindyelf和tobby都指向内存中同一个object,这样cindyelf或者tobby的一个操作都可能影响到对方.打个比方,如果我们通过cindyelf.raiseSalary()方法改变了salary域的值,那么t…
做项目时有时可能会遇到需要克隆对象的时候,因为有时候对象是直接从别的类get到的,那样引用的是一个对象,修改的话会将原先的对象也修改了. java的浅克隆,十分简单.但是只会克隆基本的数据类型,当涉及到引用类型时就不好用了. public class Employee implements Cloneable { private String name; private String gender; public String getName() { return name; } public…
Java中要想自定义类的对象可以被复制,自定义类就必须实现Cloneable中的clone()方法,如下: public class Student implements Cloneable { private String name; private int age; private Professor professor; public String getName() { return name; } public void setName(String name) { this.name…
Object中自带native clone()方法. 研究了一下用法. public class DeepCopyTest { public static void main(String[] args) throws CloneNotSupportedException { test1(); System.out.println("-----------------------------"); test2(); } static void test1() throws CloneN…
例如:把C:\Windows\SysWOW64下的所有dll文件拷贝到C:\Users\Administrator\Desktop\64dll这个目录 package com.xiaostudy.copyFile; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; pu…
浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象. 深拷贝就是两个对象的值相等,但是互相独立. 构造函数的参数是该类的一个实例.   Operator = 拷贝构造函数 clone方法 预定义非集合类型 深拷贝 如果支持拷贝构造函数的类型,则是深拷贝 不支持 自定义类型 浅拷贝 取决于实现 取决于实现 预定义集合类型 浅拷贝 会逐个调用每个元素的operator=方法 会逐个调用每个元素的operator=方法…
java克隆 为什么需要克隆 我们在很多时候需要使用一个对象去记录另外一个对象的当前状态,对象中可能会有很多属性,如果我们一个一个去设置,不仅不方便,而且效率很低,我们看一个初学者可能遇到的问题 class Person{ String name; int age; public Person() {} public Person(String name, int age) { super(); this.name = name; this.age = age; } @Override publ…
这是使用的是序列化的方式实现深拷贝 [Serializable] class Person:ICloneable { /// <summary> /// 字符串在clone 中类似于值类型的处理方式 /// </summary> public string Name { get; set; } //引用类型 clone public List<int> lis = new List<int>(); /// <summary> /// 深拷贝 //…
1. clone类 public class Person implements Cloneable, Serializable{ /** * */ private static final long serialVersionUID = -1875488046285294760L; private String name; private String age; public String getName() { return name; } public void setName(Strin…
克隆节点是DOM的常见操作,jQuery提供一个clone方法,专门用于处理dom的克隆: .clone()方法深度 复制所有匹配的元素集合,包括所有匹配元素.匹配元素的下级元素.文字节点. clone方法比较简单就是克隆节点,但是需要注意,如果节点有事件或者数据之类的其他处理,我们需要通过clone(ture)传递一个布尔值ture用来指定,这样不仅仅只是克隆单纯的节点结构,还要把附带的事件与数据给一并克隆了 例如: HTML部分 <div></div> JavaScript部分…
array Array.prototype.clone=function(){ return this.slice(0); } 对象 var o = {a: [1]}; //浅拷贝 var o1 = $.extend({}, o); console.log(o1.a === o.a); // true //深拷贝 var o2 = $.extend(true, {}, o); console.log(o2.a === o.a); //false 来自为知笔记(Wiz)…