java基础面试题(6)--Object
Object类中的常用方法
Java 中的 java.lang.Object
类是所有类的根类,任何类都直接或间接继承自它。Object
类提供了一些基本方法,这些方法在所有 Java 对象中都可用。以下是其常用方法的详细说明:
1. toString()
- 功能:返回对象的字符串表示形式,默认格式为
类名@哈希码的十六进制
(如com.example.Person@1b6d3586
)。 - 用途:常用于打印对象信息,方便调试。
- 建议:子类通常会重写此方法,返回更有意义的信息(如对象的属性值)。
@Override
public String toString() {return "Person{name='" + name + "', age=" + age + "}";
}
2. equals(Object obj)
- 功能:判断当前对象与参数对象是否 “相等”。默认实现是比较对象引用(即
this == obj
,只有两个引用指向同一对象时才返回true
)。 - 用途:比较两个对象的内容是否相等(而非引用是否相同)。
- 注意:
- 重写时需遵循等价性原则(自反性、对称性、传递性等)。
- 通常与
hashCode()
一起重写(两者逻辑需一致)。
@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);
}
3. hashCode()
- 功能:返回对象的哈希码(一个 int 值),用于哈希表(如
HashMap
、HashSet
)中快速定位对象。 - 约定:
- 如果两个对象通过
equals()
判定相等,则它们的hashCode()
必须返回相同值。 - 如果两个对象
hashCode()
不同,则equals()
一定返回false
(反之不成立)。
- 如果两个对象通过
@Override
public int hashCode() {return Objects.hash(name, age); // 利用工具类生成哈希码
}
4. getClass()
- 功能:返回对象的运行时类(
Class
对象)。 - 用途:获取对象的类型信息,常用于反射编程。
Person p = new Person();
Class<?> clazz = p.getClass();
System.out.println(clazz.getName()); // 输出类的全限定名(如 com.example.Person)
5. clone()
- 功能:创建并返回当前对象的副本(浅拷贝)。
- 使用条件:
- 类必须实现
Cloneable
接口(否则抛出CloneNotSupportedException
)。 - 需重写此方法并修改为
public
访问权限。
- 类必须实现
- 示例:见(5) “浅拷贝” 相关内容。
6. notify()
/ notifyAll()
/ wait()
- 功能:用于多线程通信,协调线程间的同步与等待。
notify()
:唤醒在此对象监视器上等待的单个线程。notifyAll()
:唤醒在此对象监视器上等待的所有线程。wait()
:使当前线程进入等待状态,直到被其他线程唤醒或超时。
- 注意:这些方法必须在同步代码块(
synchronized
) 中调用,否则抛出IllegalMonitorStateException
。
7. finalize()
- 功能:垃圾回收器回收对象前调用的方法,用于释放资源(如关闭文件、网络连接)。
- 特点:
- 调用时机不确定(由 JVM 决定),不建议依赖它释放资源。
- Java 9 后被标记为过时(
@Deprecated
),推荐使用 try-with-resources 等方式。