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

Object 有哪些常用方法

作者头像
Li_XiaoJin
发布2022-06-10 21:24:20
7510
发布2022-06-10 21:24:20
举报
文章被收录于专栏:Lixj's BlogLixj's Blog

Object 是所有类的父类,任何类都默认继承 Object。Object 类到底实现了哪些方法?

(1)clone方法

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

(2)getClass方法

final方法,获得运行时类型。

(3)toString方法

该方法用得比较多,一般子类都有覆盖。

(4)finalize方法

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

(5)equals方法

该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。

(6)hashCode方法

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。

(7)wait方法

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

(1)其他线程调用了该对象的notify方法。

(2)其他线程调用了该对象的notifyAll方法。

(3)其他线程调用了interrupt中断该线程。

(4)时间间隔到了。

此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

(8)notify方法

该方法唤醒在该对象上等待的某个线程。

(9)notifyAll方法

该方法唤醒在该对象上等待的所有线程。

代码语言:javascript
复制
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package java.lang;

public class ObjectTest {
    /**
     * 构造方法
     */
    public Object() {
    }

    /**
     *  为了使JVM发现本机功能,他们被一定的方式命名。
     *  例如,对于java.lang.Object.registerNatives,
     *  对应的C函数命名为Java_java_lang_Object_registerNatives。
     *
     *  通过使用registerNatives(或者更确切地说,JNI函数RegisterNatives),可以命名任何你想要你的C函数。
     */
    private static native void registerNatives();

    /**
     * final方法,用于获得运行时的类型。
     * 该方法返回的是此Object对象的类对象/运行时类对象Class。效果与Object.class相同。
     *
     *  Object obj = new Object();
     *  obj.getClass() == Object.class
     *
     */
    public final native Class<?> getClass();

    /**
     * 该方法用来返回其所在对象的物理地址(哈希码值),
     * 常会和equals方法同时重写,确保相等的两个对象拥有相等的hashCode。
     */
    public native int hashCode();

    /**
     * equals用来比较两个对象的内容是否相等。
     * 默认情况下(继承自Object类),equals和==是一样的,除非被覆写(override)了。
     */
    public boolean equals(Object var1) {
        return this == var1;
    }

    /**
     * clone()函数的用途是用来另存一个当前存在的对象。
     * 只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
     */
    protected native Object clone() throws CloneNotSupportedException;

    /**
     * toString()方法返回该对象的字符串表示,这个方法没什么可说的。
     * 一般会被覆写
     */
    public String toString() {
        return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
    }

    /**
     * 唤醒在此对象监视器上等待的单个线程。(
     */
    public final native void notify();

    /**
     * 唤醒在此对象监视器上等待的所有线程。
     */
    public final native void notifyAll();

    /**
     * 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量。
     */
    public final native void wait(long var1) throws InterruptedException;

    /**
     * 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,
     * 或者其他某个线程中断当前线程,或者已超过某个实际时间量。
     */
    public final void wait(long var1, int var3) throws InterruptedException {
        if (var1 < 0L) {
            throw new IllegalArgumentException("timeout value is negative");
        } else if (var3 >= 0 && var3 <= 999999) {
            if (var3 > 0) {
                ++var1;
            }

            this.wait(var1);
        } else {
            throw new IllegalArgumentException("nanosecond timeout value out of range");
        }
    }

    /**
     *  导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
     */
    public final void wait() throws InterruptedException {
        this.wait(0L);
    }

    /**
     * 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
     */
    protected void finalize() throws Throwable {
    }

    static {
        registerNatives();
    }
}

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://cloud.tencent.com/developer/article/2020518

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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