欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈Java中的克隆close()和赋值引用的区别

程序员文章站 2024-03-13 11:40:15
学生类student: package 克隆clone; /*要克隆必须实现这个借口:cloneable,以标记这个对象可以克隆 cloneable:此...

学生类student:

package 克隆clone;

/*要克隆必须实现这个借口:cloneable,以标记这个对象可以克隆
 cloneable:此类实现了 cloneable 接口,以指示 object.clone() 方法可以合法地对该类实例进行按字段复制。 
 这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
 */
public class student implements cloneable {
	private string name;
	private int age;

	public student() {
	}

	public student(string name, int age) {
		super();
		this.name = name;
		this.age = 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
	protected object clone() throws clonenotsupportedexception {
		return super.clone();
	}

}

测试克隆学生类:

package 克隆clone;

/*
 *	protected void finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。用于垃圾回收,但是什么时候回收不确定。
 *	protected object clone():创建并返回此对象的一个副本。
 *		a:重写该方法
 *
 * cloneable:此类实现了 cloneable 接口,以指示 object.clone() 方法可以合法地对该类实例进行按字段复制。 
 * 	这个接口是标记接口,告诉我们实现该接口的类就可以实现对象的复制了。
 */
public class studentclone {
	public static void main(string[] args) throws clonenotsupportedexception {
		//创建学生对象
		student s = new student();
		s.setname("林青霞");
		s.setage(27);
		
		//克隆学生对象
		object obj = s.clone();
		student s2 = (student)obj;
		system.out.println("---------");
		
		system.out.println(s.getname()+"---"+s.getage());
		system.out.println(s2.getname()+"---"+s2.getage());
		
		//以前的做法
		student s3 = s;
		system.out.println(s3.getname()+"---"+s3.getage());
		system.out.println("---------");
		
		//其实是有区别的
		s3.setname("刘意");
		s3.setage(30);
		system.out.println(s.getname()+"---"+s.getage());
		system.out.println(s2.getname()+"---"+s2.getage());
		system.out.println(s3.getname()+"---"+s3.getage());
		system.out.println("---------");
		
		//把克隆的改一下呢?
		s2.setname("克隆改的名称");
		s2.setage(66);
		system.out.println(s.getname()+"---"+s.getage());
		system.out.println(s2.getname()+"---"+s2.getage());
		system.out.println(s3.getname()+"---"+s3.getage());
		
		//也就是说把一个对象的引用赋值给一个引用,当这个引用发什么该改变的时候,同一个引用指向的对象会发生改变,但是克隆的不会变化,
		//把克隆的对象改变他的一些属性,那么也不会影响到其他的对象的值的改变
		
	}
}

以上就是小编为大家带来的浅谈java中的克隆close()和赋值引用的区别的全部内容了,希望对大家有所帮助,多多支持~