这篇文章是Java面试大纲系列第一部分 Java 基础的第一模块 Java 基础语法的最后一篇文章,介绍 Object 类中的方法以及用法。
为什么将这个问题列为面试大纲中的一个呢,因为 Java 语言是一种单根继承结构语言,也就是说,Java 中所有的类都有一个共同的祖先,这个祖先就是 Object 类。则子类会继承所有 Object 类中的 public 方法。因此,学习和掌 Object 类中的方法及其用法就很重要类。
1 Object 类的结构
如图可知,Object 类中的方法,按照用途可以分为以下几种:
构造函数hashCode() 和 equals() 函数用来判断对象是否相同,wait(), wait(long), wait(long,int), notify(), notifyAll() 线程等待和唤醒。toString() 和 getClass()clone()finalize() 用于在垃圾回收2 方法说明
2.1 clone方法
保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常。
2.2 getClass 方法
final 方法,获得运行时类的类型。
2.3 toString 方法
返回一个 String 对象,用来标识自己。该方法用得比较多,一般子类都有覆盖。
2.4 finalize 方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
(更多关于 finalize 方法,请移步Java面试大纲系列:final, finally, finalize 的区别)
2.5.equals 方法
该方法是非常重要的一个方法。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。子类一般都要重写这个方法。
2.6 hashCode 方法
该方法用于哈希查找,重写了 equals 方法一般都要重写 hashCode 方法。这个方法在一些具有哈希功能的 Collection 中用到。
一般必须满足 obj1.equals(obj2) == true。 可以推出 obj1.hashCode() == obj2.hashCode(), 但是 hashCode 相等不一定就满足 equals。 不过为了提高效率,应该尽量使上面两个条件接近等价。
(更多关于 equals 方法和 hashCode 方法,请移步Java面试大纲系列:equals与==的区别)
2.7 wait 方法
wait 方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait() 方法一直等待,直到获得锁或者被中断。wait(long timeout) 设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的 notify 方法。
(2)其他线程调用了该对象的 notifyAll 方法。
(3)其他线程调用了 interrupt 中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException 异常。
2.8 notify 方法
该方法唤醒在该对象上等待的某个线程。
2.9 notifyAll 方法
该方法唤醒在该对象上等待的所有线程。
从对 Object 类中方法有哪些,具体怎么用,可以看出你平常是否阅读过源码,是否主动去关注一些常用类的底层实现。不管是刚入行的新手还是工作很多年的大神,我觉得基础都是很重要。Java 基础语法是其他一切的基石,需要牢固掌握,不局限于1-3年Java面试大纲中列举的这些。
下一篇文章开始,将开始 Java 基础的第二模块 Java 常用集合,将学习 List、Set、Map 等常用集合的用法,使用注意事项,以及部分核心源码解析。
PS:以上内容来源与网络与个人理解,如有错误或者疑问,欢迎留言指正,不胜感激。如果觉得不错,欢迎点赞给予作者更多支持。了解更多内容欢迎关注。