Java——》Object常用的方法

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】

Java——》Object常用的方法

一、Ojbect源码

二、Object方法

1、getClass()

2、hashCode()

3、equals()

4、clone()

5、toString()

6、notify()

7、notifyAll()

8、wait(long timeout)

9、wait(long timeout, int nanos)

10、wait()

11、finalize()

三、为什么我们唤醒线程的方法,是在Object里面,而不是在线程Thread里面吗? 


一、Ojbect源码

二、Object方法

1、getClass()

  1. 获取对象的运行时 class 对象(描述对象所属类的对象)
  2. 通常是和 Java 反射机制搭配使用的
public final native Class<?> getClass();

2、hashCode()

  1. 主要用于获取对象的散列值
  2. 默认返回的是对象的堆内存地址
public native int hashCode();

3、equals()

  1. 用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回 true,否则返回 false。
  2. 一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。
  3. 子类一般都要重写这个方法。
public boolean equals(Object obj) {
    return (this == obj);
}

4、clone()

  1. 默认的 clone 方法是浅拷贝            
    • 浅拷贝:指的是对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存。
    • 深拷贝:引用的对象也重新创建。
  2. 只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常
protected native Object clone() throws CloneNotSupportedException;

5、toString()

默认返回格式如下:对象的 class 名称 + @ + hashCode 的十六进制字符串。

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

6、notify()

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

public final native void notify();

7、notifyAll()

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

public final native void notifyAll();

8、wait(long timeout)

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

9、wait(long timeout, int nanos)

  1. 导致当前线程等待,直到其他线程调用此对象的 notify() 方法或notifyAll()方法,或在指定已经过去的时间。
  2. 此方法类似于 wait 方法的一个参数,但它允许更好地控制的时间等待一个通知放弃之前的量。实时量,以毫微秒计算,计算公式如下:1000000 * timeout + nanos
  3. 在所有其他方面,这种方法与 wait(long timeout) 做同样的事情。
  4. 特别是 wait(0, 0) 表示和 wait(0) 相同。
// timeout:最大等待时间(毫秒)
// nanos:附加时间在毫秒范围(0-999999)
public final void wait(long timeout, int nanos) throws InterruptedException {
    if (timeout < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
                            "nanosecond timeout value out of range");
    }

    if (nanos > 0) {
        timeout++;
    }

    wait(timeout);
}

10、wait()

public final void wait() throws InterruptedException {
    wait(0);
}

11、finalize()

  • 用于在 GC 的时候再次被调用,如果我们实现了这个方法,对象可能在这个方法中再次复活,从而避免被 GC 回收
protected void finalize() throws Throwable { }

三、为什么我们唤醒线程的方法,是在Object里面,而不是在线程Thread里面吗?

因为在Object里,使用3bit存储了锁的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值