一文掌握 Object 类里的所有方法(wait、notify、finalize)
发布网友
发布时间:2024-10-05 04:24
我来回答
共1个回答
热心网友
时间:2024-10-28 18:36
Object 类是 Java 中所有类的父类,包含了若干方法,所有类都将继承这些方法。因此,掌握这个类的方法是非常必要的。
Object 类位于 java.base 模块下的 java.lang.Object,其中 wait0 是私有方法,不用管。这些方法分为两类:常用方法和线程相关方法。以下是具体说明。
常用方法包括:getClass()、hashCode()、equals(Object)、clone() 和 toString()。
1. getClass() 方法返回这个类对应的 Class 对象,是 Java 反射中最重要的一个类。
2. hashCode() 方法返回这个对象的哈希值,默认情况下,Object 是返回对象在堆内存中的地址。
3. equals(Object) 方法用于判断当前对象是否与传入的 obj 对象相等。在 Object 中,就是使用 == 来进行判断,但子类常常需要覆写此方法。
4. clone() 方法返回当前对象的一个浅拷贝,只有实现了 Cloneable 接口才可以调用该方法。
5. toString() 方法用于返回对象信息,一般子类都会覆写。
线程相关方法包括:wait()、wait(long)、wait(long, int)、notify() 和 notifyAll()。
1. wait() 方法让线程等待,但与 sleep 不同,如果直接在线程中的调用,会出现 java.lang.IllegalMonitorStateException 异常。
2. wait(long) 方法限定了等待时间,超过了这个时间,线程会自己唤醒自己。
3. wait(long, int) 方法与 wait(long timeout) 方法类似,只是多了一个 nanos 参数。
4. notify() 方法用于唤醒 WaitSet 中的线程,使其进入 EntrySet。
5. notifyAll() 方法唤醒所有等待中的线程。
最后,我们来说一下 finalize() 方法。这个方法在对象被 GC 回收之前调用,一般覆写这个方法完成这个对象的清理工作。
通过这篇文章,大家应该对Object 类中的方法有所了解,常用的5个方法较为简单。主要是与线程相关的方法,这才是 Object 类的重头戏。最后文章讲解了一下 finalize 方法,作为一个被废弃的方法,我们了解了它的使用方法,后续需要用 Cleaner 等方法替代。