在Java中,每一个对象都是从Object类继承而来。Object类是Java中所有类的祖先类,也是Java中最基本的类。
一、Object类的概述
Object类是所有Java类的父类。如果在类的声明中没有使用extends关键字指定父类,则默认继承自Object类。
Object类中有一些基本的方法,它们在其它类中也都可以使用。这些方法包括:
- public boolean equals(Object obj):判断当前对象与另一个对象是否相等。
- public int hashCode():返回当前对象的哈希值。
- public String toString():返回当前对象的字符串表示。
- public final void notify():唤醒在当前对象上等待的单个线程。
- public final void notifyAll():唤醒在当前对象上等待的所有线程。
- public final void wait() throws InterruptedException:使当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法。
- public final void wait(long timeout) throws InterruptedException:使当前线程等待指定的毫秒数,直到另一个线程调用该对象的notify()方法或notifyAll()方法。
- public final void wait(long timeout, int nanos) throws InterruptedException:使当前线程等待指定的毫秒数和纳秒数,直到另一个线程调用该对象的notify()方法或notifyAll()方法。
- protected void finalize() throws Throwable:当垃圾收集器确定没有对该对象的更多引用时,会调用这个方法来清理对象。
二、Object类中的方法
1. equals方法
equals方法是用来判断两个对象是否相等的。这个方法最初是在Object类中定义的,所有的Java类都继承了这个方法。然而,在默认情况下,equals方法将比较对象的引用,而不是对象的值。因此,需要重写equals方法,以便在自己的类中比较对象的值。
class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof Student)) { return false; } Student student = (Student) obj; return this.name.equals(student.name) && this.age == student.age; } } Student s1 = new Student("Alice", 20); Student s2 = new Student("Alice", 20); System.out.println(s1.equals(s2)); // 输出true
2. hashCode方法
hashCode方法返回当前对象的哈希码值,它是一个整数。在Java中,哈希码值用于存储对象,在 HashMap、HashSet等集合类中,对象的哈希值决定了对象在集合中的存储位置。
Object类中默认的hashCode方法返回的是对象的内存地址。
Student s1 = new Student("Alice", 20); System.out.println(s1.hashCode()); // 输出1956725890
如果要重写hashCode方法,需要满足以下两个条件:
- 当两个对象相等时,它们的hashCode方法应该返回相同的值。
- 当两个对象不相等时,它们的hashCode方法返回值可以相同,也可以不同。
3. toString方法
toString方法返回一个代表对象字符串的字符串。默认情况下,toString方法返回的是对象类的名字和该对象的哈希码值的十六进制表示。
Student s1 = new Student("Alice", 20); System.out.println(s1.toString()); // 输出"Student@4554617c"
可以重写toString方法,以便返回更有意义的字符串,方便调试和日志记录。
class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String toString() { return "Student(name=" + this.name + ", age=" + this.age + ")"; } } Student s1 = new Student("Alice", 20); System.out.println(s1.toString()); // 输出"Student(name=Alice, age=20)"
4. finalize方法
finalize方法是Java中的垃圾回收机制使用的方法。它在对象成为垃圾之前被调用,用于释放对象占用的资源。
在垃圾回收机制运行时,会搜索内存中的对象,并把被判定为垃圾的对象加入队列中。当垃圾回收器判定对象为可终结状态时,它会调用对象的finalize方法,清理对象占用的资源。
三、总结
在Java中,所有类都继承自Object类。Object类包含了一些基本的方法,例如equals、hashCode、toString和finalize方法。
这些方法可以在自定义类中进行重写,以便满足实际情况的需求,方便对象值比较、哈希码值计算、字符串表示和垃圾回收操作。