Java基础知识_Object类的常见方法总结

Object类是一个特殊的类,是所有类的父类。它主要提供了以下11个方法:

 1 public final natice Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写
 2 public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,比如jdk中的hashmap
 3 public boolean equals(Object obj)//用于比较两个对象的内存地址是否相等String类对于该方法进行了重写用户比较字符串的值是否相等
 4 protected native Object clone() throws CloneNotSupportedException//native方法,用于创建并返回当前对象的一份拷贝。一般情况下,对于任何对象x,表达式x.clone()!=x为true,x.chone().getClass==x.getClass()为true。Object本身并没有实现cloneable接口,所以不重写clone方法并且进行调用的话,会发生CloneNotSupportedException异常
 5 public String toString()//返回类的名字@实例的哈希码的16进制字符串,建议Object所有子类都重写这个方法
 6 public final native void notify()//native方法,并且不能重写。唤醒一个在此对象监视器上等待的线程(监视器相等于就是锁的概念)如果有多个线程在等待只会唤醒任意一个
 7 public final native void notifyAll() //native方法,并且不能重写,和notify一样,唯一的区别就是会唤醒在此监视器上等待的所有线程,而不是一个线程
 8 public final native void wait(long timeout) throws InterruptedException //native方法,不能重写。暂停线程的执行,注意sleep方法没有释放锁,而wait方法释放了锁。timeout是等待时间
 9 public final void wait(long timeout,int nanos) throws InterruptedException //多了nanos参数,这个参数表示额外时间,以毫秒为单位,范围是0-999999,所以超时时间还需要加上nanos毫秒
10 public final void wait() throws InterruptedException//跟之前的两个wait方法一样,只不过该方法一直等待,没有超时时间这个概念
11 protected void finalize() throws Throwable //实例被垃圾回收器回收触发的操作

hashCode()

hashCode返回散列值,而equals是用来判断两个对象是否等价,等价的两个对象散列值一定相同,但是散列值相同的两个对象不一定等价

在覆盖equals方法的时候应该总是覆盖hashCode方法,保证等价的两个对象散列值也相等。

 

clone()

clonable

clone是Object的protected方法,它不是public,一个类不显示的去重写clone(),其他类就不能直接调用该类实例的clone()方法。

clone() 方法并不是 Cloneable 接口的方法,而是 Object 的一个 protected 方法。Cloneable 接口只是规定,如果一个类没有实现 从、cloneable 接口又调用了 clone() 方法,就会抛出 CloneNotSupportedException。

另外这里会涉及到浅拷贝和深拷贝

浅拷贝:拷贝对象和原始对象的引用类型引用同一个对象。

深拷贝:拷贝对象和原始对象的引用来自不同的对象。(clone重新创建一个新的对象赋值)

使用clone方法来拷贝一个对象既复杂又有风险,它会抛出异常,并且还需要类型转换。

可以使用拷贝构造函数或者拷贝工厂来拷贝一个对象

posted @ 2019-08-04 09:27  chyblogs  阅读(659)  评论(0)    收藏  举报