Java面试必备:Java Object类中的方法及其作用

Java基础面试题 - Java Object类中有什么方法,有什么作用?
概述
在Java中,Object类是所有类的超类,位于java.lang包中。每个类都直接或间接继承自Object类。了解Object类中的方法对于理解Java对象的基本行为至关重要。
Object类中的方法
以下是Object类中定义的所有方法及其作用:
1. getClass()
public final native Class> getClass()
作用:返回此对象的运行时类。
示例:
Object obj = new String("Hello");
Class> clazz = obj.getClass();
System.out.println(clazz.getName()); // 输出: java.lang.String
2. hashCode()
public native int hashCode()
作用:返回对象的哈希码值,用于哈希表(如HashMap)中。
示例:
String str = "Hello";
System.out.println(str.hashCode()); // 输出哈希码值
3. equals(Object obj)
public boolean equals(Object obj)
作用:比较两个对象是否"相等"。
示例:
String s1 = new String("Hello");
String s2 = new String("Hello");
System.out.println(s1.equals(s2)); // true
4. clone()
protected native Object clone() throws CloneNotSupportedException
作用:创建并返回此对象的一个副本。
示例:
class Person implements Cloneable {
String name;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
Person p1 = new Person();
p1.name = "Alice";
Person p2 = (Person) p1.clone();
5. toString()
public String toString()
作用:返回对象的字符串表示形式。
示例:
Person person = new Person();
person.name = "Bob";
System.out.println(person.toString()); // 输出类似: Person@1b6d3586
6. notify()
public final native void notify()
作用:唤醒在此对象监视器上等待的单个线程。
7. notifyAll()
public final native void notifyAll()
作用:唤醒在此对象监视器上等待的所有线程。
8. wait()
public final void wait() throws InterruptedException
public final native void wait(long timeout) throws InterruptedException
public final void wait(long timeout, int nanos) throws InterruptedException
作用:使当前线程等待,直到其他线程调用此对象的notify()或notifyAll()方法。
9. finalize()
protected void finalize() throws Throwable
注意:此方法在Java 9中已被标记为废弃(deprecated),不建议使用。
作用:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
重要方法详解
equals() 和 hashCode() 的关系
在Java中,equals()和hashCode()方法有重要联系:
如果两个对象根据equals()方法是相等的,那么它们的hashCode()值必须相同反之则不成立 - 哈希码相同的对象不一定相等
示例:
class Employee {
private int id;
private String name;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return id == employee.id &&
Objects.equals(name, employee.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
}
clone() 方法的深浅拷贝
clone()方法默认实现的是浅拷贝。如果需要深拷贝,需要重写该方法:
class Department implements Cloneable {
String name;
Employee leader;
@Override
protected Object clone() throws CloneNotSupportedException {
Department cloned = (Department) super.clone();
cloned.leader = (Employee) leader.clone(); // 深拷贝
return cloned;
}
}
总结
Object类提供了Java对象的基本行为,理解这些方法对于编写正确的Java程序至关重要。特别是equals()、hashCode()和toString()方法在实际开发中经常需要重写以满足特定需求。
掌握Object类的方法可以帮助你更好地理解Java的对象模型和基本操作机制。