Java中 Object类是所有类的父类, 它提供了以下11个方法:
- public final native Class<?> getClass()
- public native int hashCode()
- public boolean equals(Object obj)
- protected native Object clone()throws CloneNotSupportedException
- public String toString()
- public final native void notify()
- public final native void notifyall()
- public final native void wait(long timeout)throws InterruptedException
- public final void wait(long timeout, int nanos)throws InterruptedException
- public final void wait()throws InterruptedException
- protected void finalize()throws Throwable{}
一. getClass 方法
-
native 方法表示java调用非java接口的方法,表示需要和机器进行交互,那就需要调用C的代码
-
getClass方法是一个final方法,不允许子类重写,也是一个native方法.
-
返回当前运行时对象的Class对象 ,注意是运行时.
eg:
“str”.getClass() // class java.lang.String
“str”.getClass() == String.class //true
Number n = 0;
Class<? extends Number> c = n.getClass(); //class java.lang.Integer
因为java中数值默认是Integer类型,
二. hashCode 方法
-
hashCode返回的是对象的哈希码,主要使用在哈希表中
-
哈希码的通用约定如下
(1)java程序执行的过程中,如果一个对象在没有被改变的前提下,无论调用多少次该对象的hashCode,返回的都是相同的哈希值.
相同对象没有必要在不同的程序中保持一样的哈希值.(2)如果两个对象使用equals方法进行比较相等的话,那么这两个对象的hashCode返回的值也必须相等.
(3)如果两个对象使用equals比较不相等的话,那么这两个对象的hashCode值也不需要相等.但是两个不相等的对象哈希值不相等的话有利于提高哈希表的性能
三. equals 方法
-
即比较2个对象的内存地址是否相等
-
如果重写了equals方法,通常必须要重写hashCode方法.
四.clone 方法
-
clone方法是一个protected的native方法
-
创建并返回当前对象的一份拷贝
-
由于Object方法本身没有实现Cloneable接口, 所以不重写clone方法并调用的话会抛
CloneNotSupportedException异常
五. toString 方法
- Object类的默认实现,输出 类的名字@实例的哈希码的16进制
六.notify 方法
-
一个final的native方法, 不允许子类重写.
-
唤醒一个在此对象监视器(相当于锁的概念)上等待的线程.
-
notify方法只能被作为此对象监视器的所有者的线程来调用,如果一个线程要成为对象监视器的所有者,可以使用以下3种方法
(1)执行对象的同步实例方法
(2)使用synchronized内置锁
(3)对于Class类型的对象,执行同步静态的方法
ps: 一次只能有一个线程拥有对象的监视器
-
notify方法只能在拥有对象监视器的线程中调用,否则会抛异常 IllegalMonitorStateException
七.notifyall 方法
- 与notify唯一不同的是唤醒在此对象监视器上的所有线程
八.wait(long timeout) throws InterruptedException方法
-
一个final的native方法, 不允许子类重写.
-
wait方法会让当前线程等待知道另外一个线程调用notify或notifyall方法,或者超过参数设置的timeout时间超时
-
当前线程必须是此对象的监视器所有者,否则还是会报异常
九. wait(long timeout, int nanos) throws InterruptedException方法
- 跟wait(long timeout)方法类似,多了一个nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)
十.wait() throws InterruptedException方法
-
调用wait方法需要当前线程是对象监视器的所有者.
-
一般情况下,wait方法和notify方法会一起使用的,wait方法阻塞当前线程,notify方法唤醒当前线程.
十一. finalize方法
-
finalize方法是一个protected方法,Object类的默认实现是不进行任何操作。
-
该方法的作用是实例被垃圾回收器回收的时候触发的操作