码迷,mamicode.com
首页 > 编程语言 > 详细

Java学习笔记----你可能不知道那些知识,对象复制与引用

时间:2015-06-28 23:06:45      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:java   对象复制   基础知识   object   

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   对象复制   基础知识   object   

原文地址:http://blog.csdn.net/wenwen091100304/article/details/46673865

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!