前言
真不知道该怎么做个标题党来博个眼球,苍白的命名。
说起这个Object,直译“对象”,一直觉得没什么好讲,Java的基类嘛,看看官方API就好了咩,英文不好的可以直接去看汉译版,但是面试官总喜欢用这个小刀插你,这有什么技术含量吗?可能面试官觉得这是个基本功,因为是Android面试,其实就是Java语言嘛,所以问到这个知识点也是合乎情理了,并不邪乎,来,一起揭开她的面纱。(面试的话好好看看前4个就可以应付, 其他作为了解)
Object 类起始于JDK1.0, 是类层次结构的根,Java中所有的类(包括标准容器类,比如数组)从根本上都继承自这个类,也就是直接或间接继承Object,所以Object类是Java中唯一没有父类的类。
方法摘要
返回类型 | 函数 | 解释说明 |
---|---|---|
protected Object | clone() | 创建并返回此对象的一个副本。 |
boolean | equals(Object obj) | 指示其他某个对象是否与此对象“相等”。 |
protected void | finalize() | 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 |
Class | getClass() | 返回此 Object 的运行时类。 |
int | hashCode() | 返回该对象的哈希码值。 |
void | notify() | 唤醒在此对象监视器上等待的单个线程。 |
void | notifyAll() | 唤醒在此对象监视器上等待的所有线程。 |
String | toString() | 返回该对象的字符串表示。 |
void | wait() | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。 |
void | wait(long timeout) | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。 |
void | wait(long timeout, int nanos) | 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。 |
接下来按照顺序一个一个看。
package java.lang;
说明一点java.lang包在使用的时候无需显式导入,编译时由编译器自动导入。
源码中并没有Object的构造方法,但是,同样的,编译器在编译期间会给Object一个默认的空的构造方法(事实上,所有的Java类,只要类中没有构造方法,编译器都会默认的给一个空构造方法,若已有构造方法,则不会添加):
public Object(){}
1、getClass()
private transient Class<?> shadow$_klass_;
public final Class<?> getClass() {
return shadow$_klass_;
}
返回这个Object的运行时Class对象。这个Class对象被所代表的类的static synchronized