Object类方法简介二
Posted 王醒燕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Object类方法简介二相关的知识,希望对你有一定的参考价值。
在学了Object类前面的三个常用方法后,又遇到它的另外三个方法——clone()、finalize()、getClass(),这三个方法不经常使用,但因为在学习过程遇到了,就简单的对它们的使用做一个总结。
1.对象克隆——clone()方法
protected Object clone() throws CloneNotSupportedException;
使用该方法可以克隆一个对象,即创建一个对象的副本。要使类的对象能够克隆,该类必须实现Cloneable接口。这个接口里面没有定义任何方法,属于标识接口,即给类一个特殊标签。
1 public class Student implements Cloneable 2 { 3 private int num; 4 private String name; 5 public Student(int num,String name) 6 { 7 this.num=num; 8 this.name=name; 9 } 10 @Override 11 public boolean equals(Object o) 12 { 13 return this.num==((Student)o).num; 14 } 15 @Override 16 public String toString() 17 { 18 return "学号:"+num+",姓名:"+name; 19 } 20 public static void main(String args[]) throws CloneNotSupportedException 21 { 22 Student s1 = new Student(1001,"Mary"); 23 Student s2 = (Student)s1.clone(); 24 System.out.println(s1==s2);//false 25 System.out.println(s1.equals(s2));//true 26 System.out.println(s1.getClass().getName());//ClassNotes.Student 27 System.out.println(s1.hashCode());//366712642 28 System.out.println(s2.hashCode());//366712642 29 System.out.println(s1);//学号:1001,姓名:Mary 30 System.out.println(s2);//学号:1001,姓名:Mary 31 32 } 33 }
这个例子使用了Object类的五种方法,其中clone()方法声明抛出CloneNotSupportedException异常,程序在main()方法的声明中抛出了该异常。
2.getClass()方法
该方法,它会返回一个你的对象所对应的一个Class的对象,这个返回来的对象保存着你的原对象的类信息,比如你的原对象的类名叫什么,类里有什么方法,字段等,和反射相关。
Date date = new Date(); Class<?>cls = date.getClass();//得到类的包名
3.对象终结——finalize()方法
protected void finalize() throws Throwable;
在对象被销毁之前,垃圾回收站允许对象调用该方法进行清理工作,清除在对象外被分配的资源。
1 public class Student implements Cloneable 2 { 3 @Override 4 protected void finalize() throws Throwable 5 { 6 System.out.println("The object is destroyed"); 7 } 8 public static void main(String args[]) 9 { 10 Student s1 = new Student(); 11 Student s2 = new Student(); 12 s1 = null; 13 s2 = null; 14 System.gc();//执行垃圾回收 15 } 16 }
输出结果:
The object is destroyed
The object is destroyed
GC在回收对象之前自动调用finalize()方法,而且需要显示地调用垃圾回收方法(System.gc()),并且需要有new出来的尚未被销毁的匿名对象的存在,finalize()方法才一定会被调用。在某些情况下,finalize ()方法可能不会运行完成或可能根本不运行,JVM不保证此方法总被调用。
以上是关于Object类方法简介二的主要内容,如果未能解决你的问题,请参考以下文章