📜  java object类(1)

📅  最后修改于: 2023-12-03 15:01:31.744000             🧑  作者: Mango

Java Object 类

Java Object 类是 Java 语言中的根类,所有的类都直接或间接继承自这个类。它定义了通用的方法,这些方法可以在任何Java对象上被调用。

常用方法介绍
equals(Object obj)

判断当前对象是否与传入的对象相等。

public boolean equals(Object obj)
hashCode()

返回当前对象的哈希值。

public int hashCode()
toString()

返回当前对象的字符串表示。

public String toString()
getClass()

返回当前对象的类对象。

public final Class<?> getClass()
clone()

复制当前对象。需要实现 Cloneable 接口。

protected native Object clone() throws CloneNotSupportedException
notify()

唤醒等待该对象的线程中的一个线程。

public final native void notify()
notifyAll()

唤醒等待该对象的线程中的所有线程。

public final native void notifyAll()
wait()

在当前线程上等待该对象的通知。需要在 synchronized 块中调用。

public final void wait() throws InterruptedException
wait(long timeout)

在当前线程上等待该对象的通知,最多等待 timeout 毫秒。需要在 synchronized 块中调用。

public final native void wait(long timeout) throws InterruptedException
wait(long timeout, int nanos)

在当前线程上等待该对象的通知,最多等待 timeout 毫秒和 nanos 纳秒。需要在 synchronized 块中调用。

public final void wait(long timeout, int nanos) throws InterruptedException
常用示例
equals() 和 hashCode()
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}
toString()
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
wait() 和 notify()
public class Message {
    private String message;
    private boolean isMessageAvailable;

    public synchronized void write(String message) {
        while (isMessageAvailable) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.message = message;
        isMessageAvailable = true;
        notify();
    }

    public synchronized String read() {
        while (!isMessageAvailable) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        isMessageAvailable = false;
        notify();
        return message;
    }
}