面试题 Object类有多少种方法

转载链接
https://blog.csdn.net/zythemoon/article/details/78396736

想要更加详细的了解,推荐大家去看源码。

java是一个庞大的知识体系,本文从java的开始,即作为面向对象语言最基本的类java.lang.Object开始

对于Object大家都知道是一个非常神奇的类,它是JAVA所有类的始祖,在JAVA里每一个类都是由它间接或者直接的扩展而来,所以可以说Object类是上帝类,只要没有明确的指出超类Object就被认为是这个类的超类(即在你编写一个类的时候,若无指定父类(没有显式extendes一个父类)编译器(一般编译器完成该步骤)就会默认的添加Object为该类的父类),它位于java.lang包,该包包含java最核心基础的类这些类的属性和行为,是java语言的思维体现。
Object类型的变量只能用于作为各种值的通用持有者,要想对其中的内容进行具体的操作,还需要清楚对象的原始类型并进行类型装换,在JAVA中只有基本类型不是对象,所有的数组类型,不管是对象数组还是基本类型的数组都扩展于Object类
在编译时会自动导入,Object没有定义属性,一共有13个方法(但是有几个函数只在处理线程时才会被调用的方法),java 的任何类都继承了这些函数,并且覆盖了不被final修饰的函数
因为Object是Java所有类的祖先类,所以Java所有类都有Object中的方法,在看这些方法的时候要联系这些方法不是针对Objec一个类,而是所有类。
  既然是所有类共有,设计的时候肯定想的是所有类的共性,比如:equals方法就是用来比较任意两个相同类型对象是否相等的,toString是用来将任意对象转换成String,方便打印查看。当然,以上方法的实现都是默认的,想要实现自己的逻辑需要在自己类中覆盖重写。

先看看Object类的源码
package java.lang;
public class Object {
private static native void registerNatives();
static {
registerNatives();
}

public final native Class<?> getClass();
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}
/本地CLONE方法,用于对象的复制。/
protected native Object clone() throws CloneNotSupportedException;
/返回该对象的字符串表示。非常重要的方法/
public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}
/唤醒在此对象监视器上等待的单个线程。/
public final native void notify();
/唤醒在此对象监视器上等待的所有线程。/
public final native void notifyAll();
/在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。
当前线程必须拥有此对象监视器。该线程发布对此监视器=的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。
/
public final void wait() throws InterruptedException {
wait(0);
}
/在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。/
public final native void wait(long timeout) throws InterruptedException;
/* 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。*/
public final void wait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
throw new IllegalArgumentException(“timeout value is negative”);
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
“nanosecond timeout value out of range”);
}
if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}
wait(timeout);
}
/当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。/
protected void finalize() throws Throwable { }
}
有以下13个方法
public Object()
private static native void registerNatives()
protected navite Object clone()
public boolean equals(Object obj)
protected void finalize()
public final native Class<? > getClass()
public native int hashCode()
public final native void notify()
public final native void notifyAll()
public String toString()
public final void wait()
public final native void wait(long timeout)
public final void wait(long timeout, int nanos)

对这些方法功能进行简单的描述:
(一)Object():默认构造方法
(二)clone():创建并返回此对象的一个副本
(三)equals():指示某个其他对象是否与此对象相等
(四)finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
(五)getClass():返回一个对象的运行时类
(六)hashCode():返回该对象的哈希值
(七)notify():唤醒此对象监视器上等待的单个线程
(八)notifyAll():唤醒此对象监视器上等待的所有线程
(九)toString():返回该对象的字符串表示
(十)wait():导致当前的线程等待,直到其它线程调用此对象的notify()或notifyAll()
(十一)wait(long timeout):导致当前的线程等待调用此对象的notify()或notifyAll()
(十二)wait(long timeout, int nanos):导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll(),或其他某个线程中断当前线程,或者已超过某个实际时间量
(十三)registerNatives():对本地方法进行注册

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值