一、Object類簡介
Java.lang.Object類是Java開發中最基礎、最重要的類之一。該類是所有Java類的祖先。在Java語言中所有的類都直接或者間接繼承這個類。
Object類提供了以下幾個方法:
public final native Class<?> getClass(); public native int hashCode(); public boolean equals(Object obj); protected native Object clone() throws CloneNotSupportedException; public String toString(); public final native void notify(); public final native void notifyAll(); public final native void wait(long timeout) throws InterruptedException; public final void wait(long timeout, int nanos) throws InterruptedException; public final void wait() throws InterruptedException; protected void finalize() throws Throwable;
Object類的源碼可以在JDK的安裝目錄下的rt.jar文件中找到。
二、Object類方法的詳細解釋
1. getClass()
返回此 Object 的運行時類。
// 示例代碼
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
Class clazz = demo.getClass();
System.out.println(clazz.getName()); // 列印結果:com.example.Demo
}
}
2. hashCode()
返回該對象的哈希碼值。
// 示例代碼
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
int hashCode = demo.hashCode();
System.out.println(hashCode); // 列印結果:439201023
}
}
3. equals(Object obj)
指示某個其他對象是否等於此對象。
// 示例代碼
public class Demo {
public static void main(String[] args) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
System.out.println(demo1.equals(demo2)); // 列印結果:false
}
}
4. clone()
產生並返回此對象的一個副本。
// 示例代碼
public class Demo implements Cloneable {
public static void main(String[] args) throws CloneNotSupportedException {
Demo demo = new Demo();
Demo clone = (Demo) demo.clone();
}
}
5. toString()
返回該對象的字元串表示。
// 示例代碼
public class Demo {
public static void main(String[] args) {
Demo demo = new Demo();
String str = demo.toString();
System.out.println(str); // 列印結果:com.example.Demo@53498e81
}
}
6. notify()
喚醒在此對象監視器上等待的單個線程。
7. notifyAll()
喚醒在此對象監視器上等待的所有線程。
8. wait(long timeout)
導致當前線程等待,直到另一個線程調用此對象的 notify() 方法或 notifyAll() 方法,或者指定的時間已經過去。
9. wait(long timeout, int nanos)
導致當前線程等待,直到另一個線程調用此對象的 notify() 方法或 notifyAll() 方法,或者指定的時間已經過去。
10. wait()
導致當前線程等待,直到另一個線程調用此對象的 notify() 方法或 notifyAll() 方法。
11. finalize()
在垃圾收集器刪除對象之前,用於清除資源。
三、Object類的使用場景
Object類可以說是Java語言中最基礎的類之一。由於Java語言中的所有類都直接或者間接繼承自Object類,因此Object類在Java開發中幾乎無處不在。下面列舉了一些使用Object類的常見場景:
1. 泛型
Java中的泛型可以使用Object類型作為通配符,其示例代碼如下:
public class GenericClass<T> {
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
public static void main(String[] args) {
GenericClass<Object> object = new GenericClass<>();
object.set(new Object());
Object o = object.get();
}
}
2. 使用反射實例化對象
Java中可以使用反射機制來實例化一個對象,此時需要用到Object類的newInstance()方法。如下代碼所示:
public class ReflectionDemo {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("com.example.Demo");
Object object = clazz.newInstance();
}
}
3. Java中的多線程
Java的線程是由Java.lang.Thread類創建的。Java線程模型的核心是等待-通知機制,也就是使用Object類的wait()和notify()方法。下面是一個使用Object類的wait()和notify()方法實現線程通信的示例代碼:
public class WaitAndNotifyDemo {
private final Object lock = new Object();
private volatile boolean flag = false;
public void waitMethod() {
synchronized (lock) {
while (!flag) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 執行業務操作
}
}
public void notifyMethod() {
synchronized (lock) {
flag = true;
lock.notify();
}
}
}
四、總結
Object類是Java開發中最基礎、最重要的類之一。該類是所有Java類的祖先,相信大家在開發中都會使用到Object類提供的一系列方法。要了解Object類,我們需要學習它的源碼並且在實際開發中應用它。在Java開發中,Object類的使用非常廣泛,充分了解它可以讓我們更好地理解Java語言的機制。
原創文章,作者:NGSWD,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/368534.html
微信掃一掃
支付寶掃一掃