Object 类说明

概述

Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法

创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类

Object 类可以显式继承,也可以隐式继承

//显式继承
public class Runoob extends Object{

}
//隐式继承
public class Runoob {

}

常用方法

clone()

clone 方法是浅拷贝,对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存,相对应的深拷贝则会连引用的对象也重新创建。

object.clone()

equals()

equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等

注意:如果子类重写了 equals() 方法,就需要重写 hashCode() 方法,比如 String 类就重写了 equals() 方法,同时也重写了 hashCode() 方法。

object.equals(Object obj)

如果两个对象相等返回 true,否则返回 false。

finalize()

Object finalize() 方法用于实例被垃圾回收器回收的时触发的操作

GC (垃圾回收器) 确定不存在对该对象的有更多引用时,对象的垃圾回收器就会调用这个方法

protected void finalize()
 // 创建 RunoobTest 对象
 RunoobTest cal = new RunoobTest();
 cal.finalize();

getClass()

方法用于获取对象的运行时对象的类

object.getClass()

返回对象的类。

class RunoobTest {
    public static void main(String[] args) {
 
    // getClass() with Object
    Object obj1 = new Object();
    System.out.println("obj1 的类为: " + obj1.getClass());
 
    // getClass() with String
    String obj2 = new String();
    System.out.println("obj2 的类为: " + obj2.getClass());
 
    // getClass() with ArrayList
    ArrayList<Integer> obj3 = new ArrayList<>();
    System.out.println("obj3 的类为: " + obj3.getClass());
    }
}
/*
obj1 的类为: class java.lang.Object
obj2 的类为: class java.lang.String
obj3 的类为: class java.util.ArrayList
*/

自定义类调用 getClass() 方法

class RunoobTest {
    public static void main(String[] args) {
 
        // 创建 RunoobTest 类的对象
        RunoobTest obj = new RunoobTest();
        
        // RunoobTest 继承 Object 类,Object 是所有类的超类
        // 调用 getClass() 方法
        System.out.println(obj.getClass());
    }
}
/*
class RunoobTest
*/

hashCode()

方法用于获取对象的 hash 值。

object.hashCode()

返回对象哈希值,是一个整数,表示在哈希表中的位置

notify()

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

Object notify() 方法用于唤醒一个在此对象监视器上等待的线程

  • 如果所有的线程都在此对象上等待,那么只会选择一个线程选择是任意性的,并在对实现做出决定时发生。

一个线程在对象监视器上等待可以调用 wait() 方法。

notify() 方法只能被作为此对象监视器的所有者的线程来调用
如果当前线程不是此对象监视器的所有者的话会抛出 IllegalMonitorStateException 异常。

一次只能有一个线程拥有对象的监视器

public final void notify()

没有返回值。

notifyAll()

Object notifyAll() 方法用于唤醒在该对象上等待的所有线程

notifyAll() 方法跟 notify() 方法一样,区别在于 notifyAll() 方法唤醒在此对象监视器上等待的所有线程,notify() 方法是一个线程

如果当前线程不是对象监视器的所有者,那么调用 notifyAll() 方法同样会发生 IllegalMonitorStateException 异常。

public final void notifyAll()

没有返回值。

toString()

Object toString() 方法用于返回对象的字符串表示形式。

object.toString()

返回对象的字符串表示形式。

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

wait()

wait() 方法让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法

当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。

如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。

public final void wait()

没有返回值

wait(long timeout)

wait(long timeout) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数 timeout 设置的超时时间。

如果 timeout 参数为 0,则不会超时,会一直进行等待,类似于 wait() 方法

当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。

如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。

如果传递的参数不合法,则会抛出 IllegalArgumentException 异常。

public final void wait(long timeout)

timeout - 等待时间(以毫秒为单位
没有返回值。

void wait(long timeout, int nanos)

与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒

导致当前线程等待,直到另一个线程调用此对象的notify()方法或notifyAll()方法,或者已经过了指定的时间量。

public final void wait(long timeout, int nanos)

参数:

  • timeout - 等待的最长时间(以毫秒为单位)。
  • nanos - 额外时间,以纳秒为单位,范围为0-999999。
1000000*timeout+nanos

此方法无返回值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

?abc!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值