Java学习笔记90——Object类—colne方法
protected Object clone()
创建并返回此对象的副本。
protected void finalize() throws Throwable当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 一个子类覆盖了处理系统资源或执行其他清理的finalize方法。 这个方法简单理解为就是用来垃圾回收的,什么时候回收呢?不确定。 GC机制
clone的方法Object执行特定的克隆操作。
首先,如果此对象的类不实现接口Cloneable ,则抛出CloneNotSupportedException 。 将想要调用克隆方法的类实现Cloneable接口 通过观察API发现,Cloneable接口中没有成员变量也没有成员方法 今后看到类似于Cloneable接口里面什么都没有的接口,我们称之为标记接口
拷贝在IT行业中常见两种:
拷贝的时候,重新创建一个对象,成员变量值和被拷贝的一样,但是后续修改与原先的没有关系 深拷贝 拷贝的时候,没有创建新的对象,只是改个名字,地址值都一样,修改拷贝后的连带影响到原先的
import java.util.Objects;
public class Student5 implements Cloneable{
private String name;
private int age;
public Student5() {
}
public Student5(String name, int age) {
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
// public String toString() {
// return "姓名:" + name + ",年龄:" + age;
// }
@Override
public String toString() {
return "Student3{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student5 student5 = (Student5) o;
return age == student5.age &&
Objects.equals(name, student5.name);
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class StudentTest4 {
public static void main(String[] args) throws CloneNotSupportedException {
Student5 s1 = new Student5("华根", 18);
System.out.println(s1.toString());
//CloneNotSupportedException
//这里其实隐含了多态
Object obj = s1.clone();
//
System.out.println(obj.toString());
Student5 s2 = s1;
System.out.println(s2.toString());
System.out.println("**************************");
s2.setAge(20);
// ((Student5)obj)
System.out.println(s1.toString());//Student3{name="华根",age=20}
System.out.println(s2.toString());//Student3{name="华根",age=20}
System.out.println(obj.toString());//Student3{name="华根",age=18} clone的是初始值
}
}

浙公网安备 33010602011771号