Object类——java

Object 类是 Java 类层次结构中的根类,所有类都直接或间接地继承自 Object 类。因此,Object 类中的方法可以被所有 Java 对象使用。下面是 Object 类的一些关键方法及其用途:

Object 类的方法

  1. public final Class getClass()
    返回对象的运行时类。

    Object obj = new String("Hello");
    Class<?> clazz = obj.getClass();
    System.out.println(clazz.getName()); // 输出: java.lang.String
    
  2. public int hashCode()
    返回对象的哈希码值。默认情况下,哈希码值与对象的内存地址有关。有可能不同对象拥有相同的哈希码值。

    Object obj = new Object();
    int hashCode = obj.hashCode();
    System.out.println(hashCode);
    
  3. public boolean equals(Object obj)
    判断两个对象是否相等。默认实现是比较对象的内存地址,可以在子类中重写以实现自定义的相等逻辑。

    Object obj1 = new Object();
    Object obj2 = new Object();
    System.out.println(obj1.equals(obj2)); // 输出: false
    
  4. protected Object clone() throws CloneNotSupportedException
    创建并返回对象的副本。类必须实现 Cloneable 接口并重写 clone 方法。

    class MyClass implements Cloneable {
        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }
    }
    
  5. public String toString()
    返回对象的字符串表示形式。默认实现是类名 + “@” + 哈希码的十六进制表示,可以在子类中重写。

    Object obj = new Object();
    System.out.println(obj.toString()); // 输出: java.lang.Object@
    
  6. public final void notify()
    唤醒在此对象监视器上等待的单个线程。必须在同步方法或同步块中调用。

    synchronized(obj) {
        obj.notify();
    }
    
  7. public final void notifyAll()
    唤醒在此对象监视器上等待的所有线程。必须在同步方法或同步块中调用。

    synchronized(obj) {
        obj.notifyAll();
    }
    
  8. public final void wait()
    导致当前线程等待,直到其他线程调用此对象的 notify()notifyAll() 方法。必须在同步方法或同步块中调用。

    synchronized(obj) {
        obj.wait();
    }
    
  9. public final void wait(long timeout)
    导致当前线程等待,直到其他线程调用此对象的 notify()notifyAll() 方法,或者经过指定的时间。

    synchronized(obj) {
        obj.wait(1000L); // 等待1秒
    }
    
  10. public final void wait(long timeout, int nanos)
    导致当前线程等待,直到其他线程调用此对象的 notify()notifyAll() 方法,或者经过指定的时间(以毫秒和纳秒为单位)。

    synchronized(obj) {
        obj.wait(1000L, 500); // 等待1秒和500纳秒
    }
    
  11. protected void finalize() throws Throwable
    在垃圾回收时由垃圾回收器调用,子类可以重写此方法以清理资源。但是,不推荐使用 finalize 方法,因为它是不可靠和不确定的。

示例代码

下面是一个示例,展示了如何重写 Object 类的一些方法:

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 && name.equals(person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "', age=" + age + "}";
    }

    public static void main(String[] args) {
        Person p1 = new Person("Alice", 30);
        Person p2 = new Person("Alice", 30);
        Person p3 = new Person("Bob", 25);

        System.out.println(p1.equals(p2)); // 输出: true
        System.out.println(p1.equals(p3)); // 输出: false
        System.out.println(p1.hashCode()); // 输出: 具体的哈希码值
        System.out.println(p1.toString()); // 输出: Person{name='Alice', age=30}
    }
}

总结

1.Object 类是所有类的根类,提供了一些基础方法,如 equalshashCodetoStringclonenotifywait 等。
2.可以根据需求在子类中重写这些方法,以实现自定义的行为。
3. Object 类的方法在实现多线程同步、对象比较和对象字符串表示等方面非常重要。

你可能感兴趣的:(java学习,java,开发语言,jvm)