前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Object类有哪些方法?

Object类有哪些方法?

作者头像
黑洞代码
发布2021-01-14 15:20:34
1.3K0
发布2021-01-14 15:20:34
举报

圣诞节快乐

类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。

简单来说就是,Object类是所有类的父类,包括我们所写的类,我们在使用类的时候就会利用Object类中的方法~

以下两种类的定义的最终效果是完全相同的:

代码语言:javascript
复制
class Person { }

class Person extends Object { }

Object类核心方法如下。

代码语言:javascript
复制
/**
 * native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。
 */
public final native Class<?> getClass();

/**
 * native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。
 */
public native int hashCode();

/**
 * 用于比较2个对象的内存地址是否相等,String类对该方法进行了重写用户比较字符串的值是否相等。

 */
public boolean equals(Object obj);

/**
 * naitive方法,用于创建并返回当前对象的一份拷贝。
 * 一般情况下,对于任何对象 x,表达式 x.clone() != x 为true,
 * x.clone().getClass() == x.getClass() 为true。
 * Object本身没有实现Cloneable接口,
 * 所以不重写clone方法并且进行调用的话会发生CloneNotSupportedException异常。
 */
protected native Object clone() throws CloneNotSupportedException;

/**
 * 返回类的名字@实例的哈希码的16进制的字符串。建议Object所有的子类都重写这个方法。
 */
public String toString();

/**
 * native方法,并且不能重写。
 * 唤醒一个在此对象监视器上等待的线程(监视器相当于就是锁的概念)。
 * 如果有多个线程在等待只会任意唤醒一个。
 */
public final native void notify();

/**
 * native方法,并且不能重写。
 * 跟notify一样,唯一的区别就是会唤醒在此对象监视器上等待的所有线程,而不是一个线程。
 */
public final native void notifyAll();

/**
 * native方法,并且不能重写。暂停线程的执行。
 * 注意:sleep方法没有释放锁,而wait方法释放了锁 。timeout是等待时间。
 */
public final native void wait(long timeout) throws InterruptedException;

/**
 * 多了nanos参数,这个参数表示额外时间(以毫微秒为单位,范围是 0-999999)。
 * 所以超时的时间还需要加上nanos毫秒。
 */
public final void wait(long timeout, int nanos) throws InterruptedException;

/**
 * 跟之前的2个wait方法一样,只不过该方法一直等待,没有超时时间这个概念。
 */
public final void wait() throws InterruptedException;

/**
 * 实例被垃圾回收器回收的时候触发的操作。
 */
protected void finalize() throws Throwable { };

问:什么是native方法?

答:native关键字标识的Java方法为本地方法,底层是由C/C++程序编译后dll文件,Java加载dll文件后,可通过本地方法调用dll函数。

问:为什么wait方法一般要写在while循环里?

答:在某个线程调用notify到等待线程被唤醒的过程中,有可能出现另一个线程得到了锁并修改了条件使得条件不再满足;只有某些等待线程的条件满足了,但通知线程调用了notifyAll有可能出现“伪唤醒”。

问:wait方法和sleep方法的区别?

答:wait方法属于object类,当调用wait方法时,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify方法后本线程才会进入对象锁定池,准备获取对象锁进入运行状态。sleep方法属于thread类,sleep方法导致程序暂停执行指定的时间,让出CPU给其他线程,但是它的监控状态依然保持,当指定的时间到了又会恢复运行状态。在调用sleep方法过程中,线程不会释放对象锁。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 落叶飞翔的蜗牛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档