API中的Object之clone方法和finalize方法

标签:  API中的Object之clone方法和finalize方 clone方法 finalize方法 浅克隆 深克隆 API clone方法的重写
3人阅读 评论(0) 收藏 举报
分类:

 API中的Object之clone方法和finalize方法

(1)protected void finalize( ):当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法。主要用于垃圾回收,但是什么回收,不确定。

(2)protected Object clone( ):创建并返回一个此对象的副本。

    重写该方法: 自动生成的版本就行。 

    Cloneable:此类实现了Cloneable 接口,以指示Object.clone()方法可以合法的,对该实例进行按字段复制。

这个接口没有方法,仅仅表示的是一个标记接口,告诉我们 实现该接口就可以实现对象的复制了。


(3)举例子:

package cn.itcast_04;

//实现该标记接口
public class Student implements Cloneable {
	private String name;
	private int age;

	public Student() {
		super();
	}

	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();
	}
	
	
}

**********************************************************


public class StudentDemo {
	public static void main(String[] args) throws CloneNotSupportedException {
		// 创建类的对象
		Student s = new Student();
		s.setName("cmm");
		s.setAge(26);
		
		// 实现对象的复制
		Object obj = s.clone();
		// 对象的转型
		Student s2 = (Student)obj;
		
		System.out.println("name:"+s.getName()+", age:"+s.getAge());
		System.out.println("name:"+s2.getName()+", age:"+s2.getAge());
		
		System.out.println("-------------");
		// 以前的做法:
		Student s3 = s;
		s3.setName("cmm2");
		s3.setAge(36);
		// 其实是有区别的。克隆做法:两个一模一样的克隆!
		System.out.println("name:"+s.getName()+", age:"+s.getAge());
		System.out.println("name:"+s2.getName()+", age:"+s2.getAge());
		System.out.println("name:"+s3.getName()+", age:"+s3.getAge());
		
		
	}

}


查看评论

java Object类 clone()方法 详解

今天写程序的时候像直接调用Object的clone()方法来copy一个副本,但是发现myEclipse的提示中并没有该方法,以为在jdk1.7中取消了该方法,然后我直接敲上clone()后: pub...
  • three__stones
  • three__stones
  • 2016-03-22 16:10:44
  • 2919

关于finalize()方法(总结)

finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,g...
  • x_i_y_u_e
  • x_i_y_u_e
  • 2016-05-11 19:05:34
  • 5646

Java Object的clone方法

在Object中clone()方法
  • Jannolan
  • Jannolan
  • 2017-03-07 13:26:49
  • 220

Object源码分析(一)-- clone方法

java基类Object 在你编写一个类的时候,若无指定父类(没有显式extends一个父类)编译器(一般编译器完成该步骤)会默认的添加Object为该类的父类(可以将该类反编译看其字节码,不过貌似J...
  • qq_32924343
  • qq_32924343
  • 2017-09-05 21:11:05
  • 352

Java Object对象之clone方法

参考文章:点击打开链
  • bigconvience
  • bigconvience
  • 2014-05-05 11:56:15
  • 22399

java学习之finalize()方法

我们知道,java的垃圾回收器会负责清理回收无用对象占用的内存资源。但是,当一个java对象并非使用new创建而获取并占用了内存空间时,该如何清理回收它呢?为了应对这种情况,java提供了一个fina...
  • zuobian011
  • zuobian011
  • 2018-02-22 11:02:01
  • 9

java中Object类中的finalize()方法的理解

看java api文档的过程中,有时候会发现并非想象中的那么的通熟易懂,这个时候需要耐心、仔细的看,再加上一定的知识储备,就更容易看懂了。除此之外,从文档中提炼有用信息的能力也很重要!看到finali...
  • hi_xww
  • hi_xww
  • 2017-09-27 00:22:16
  • 111

Java中Object类之clone()方法详解

clone意思是克隆、复制。若需修改一个对象,同时不想改变调用者的对象,就要制作该对象的一个本地副本。这也是本地副本最常见的一种用途。若决定制作一个本地副本,只需简单地使用 clone()方法即可。C...
  • one_Jachen
  • one_Jachen
  • 2017-10-16 08:40:40
  • 1397

java中finalize()方法

1、对象的finalize()方法简介 当垃圾回收器将要释放无用对象的内存时,先调用该对象的finalize()方法。如果在程序终止之前垃圾回收器始终没有执行垃圾回收操作,那么垃圾回收器将始...
  • wenwenxiong
  • wenwenxiong
  • 2015-04-30 18:46:09
  • 2828

Java中Object类的clone()(克隆)方法

Java提供了一个projected修饰的clone()方法,该方法用来实现对象的“自我克隆”,即得到当前对象的一个副本,并且两个对象之间完全隔离。需要注意的是,由于该方法使用projected修饰,...
  • yuxxz
  • yuxxz
  • 2015-02-11 23:04:41
  • 2823
    个人资料
    持之以恒
    等级:
    访问量: 6万+
    积分: 3260
    排名: 1万+
    最新评论