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()方法

 public final native Class<?> 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类方法简介二的主要内容,如果未能解决你的问题,请参考以下文章

Object类方法简介二

JDK1.8源码学习-Object

Object类

object类的equals方法简介 & String类重写equals方法

Java语言中Object类定义了哪11种方法?

Java Object 构造方法的执行顺序