一、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语言的机制。