Java学习笔记----你可能不知道那些知识,对象复制与引用
2017-05-18 14:41
731 查看
1.private ,protected,static不能用来修饰interface。
2.java在处理基本数据类型(比如int ,char,double)时,都是採用按值传递的方式运行。除此之外的其他类型都是按引用传递的方式运行。对象除了在函数调用时时引用传递,在使用“=”赋值时也是採用引用传递。
3.怎样在java中进行对象的复制。而不是引用。举例:
class Obj implements Cloneable{ private int a=0; public int getA(){ return a; } public void setA(int b){ this.a=b; } public void changedA(){ this.a=1; } public Object clone(){ Object o=null; try{ 0=(Obj)super.clone(); }catch(CloneNotSupportedException e){ e.printStatckTrace(); } return o; } } public class TestRef{ public static void main(String args[]){ Obj a= new Obj(); Obj b=(Obj)a.clone(); b.changedA(); System.out.println("a:"+a.getA()); System.out.println("b:"+b.getA()); } }
程序执行结果为:
a:0
b:1
因此要赋值一个类,必须实现Cloneable接口。步骤:
(1)实现clone的累首先要继承Cloneable接口。
Cloneable接口实质是一个标识接口(没有不论什么方法,即空接口)
(2)在类中重写Object类的clone()方法。
(3)在clone()方法中调用super.clone().
(4)把浅复制的引用指向原型对象新的克隆体。
当类中有除基本数据以外的其他复杂对象属性时,在重写clone()方法时要对非基本类型的属性完毕深复制。举比例如以下:
class Obj implements Cloneable{ private Date birthday = new Date(); private int a=0; public int getA(){ return a; } public void setA(int b){ this.a=b; } public void changedA(){ this.a=1; } public Date getDate(){ return birthday(); } public void setDate(Date date){ this.birthday = date; } public void changeDate(){ this.birthday.setMonth(4); } public Object clone(){ Object o=null; try{ 0=(Obj)super.clone(); }catch(CloneNotSupportedException e){ e.printStatckTrace(); } //实现深复制 o.birthday=(Date)this.getDate().clone(); return o; } } public class TestRef{ public static void main(String args[]){ Obj a= new Obj(); Obj b=(Obj)a.clone(); b.changedA(); System.out.println("a:"+a.getA()); System.out.println("b:"+b.getA()); } }
浅复制和深复制的差别:
浅复制:被复制对象的全部变量都含有与原来对象同样的值,而全部其它对象的引用仍然指向原来的对象同样的值,而全部对其它对象的引用仍然指向原来的对象。
深复制:被复制对象的全部变量都含有与原来对象同样的值。出去那些引用其它对象的变量。
那些引用其它对象变量将指向被复制的新对象,而不再是原有的那些被引用的对象都复制了一遍。
相关文章推荐
- Java学习笔记----你可能不知道那些知识,对象复制与引用
- 【Java学习笔记】基础知识学习19【一个大文件的复制方法】
- java学习笔记:java的多态,子类和父类的相互转换,父类引用指向子类的对象
- Java学习笔记之对象传值和引用总结
- 【java基础知识(学习笔记)】--引用数据类型
- 持有对象的引用 -Java学习笔记(33)
- 【Java学习笔记】基础知识学习6【类的基础、方法,对象基础、包】
- JAVA学习笔记3--类,对象,变量,方法,构造方法,this,引用类型
- java学习笔记:引用与对象(1)
- 【Java学习笔记】基础知识学习18【一个小文件的复制方法】
- java学习笔记1:对象的"引用"
- Java学习笔记一:基本语法:类和对象的介绍、数组、引用类型
- 【Java学习笔记】基础知识学习5【数组排序,复制】
- java学习个人笔记---java内存管理之Java对象的引用方式
- Java学习笔记(5):2.面向对象之对象的this引用
- java学习笔记——java中对象的创建,初始化,引用的解析
- Java学习笔记之对象和对象引用
- 【Java学习笔记】父类引用指向子类对象时方法的调用
- 你不知道的Java学习笔记19-- 对象序列化
- Java学习笔记(84)----------关于 Java 对象序列化你不知道的 5 件事