您的位置:首页 > 移动开发 > Objective-C

Object类:品读API

2016-05-10 19:39 363 查看
学了好久Java,却还没仔细研读过Object类,实为遗憾,今日读下,在此记之。

java.lang.Object 即Object类位于java.lang包。

public class Object

Object类是一切类的根(始祖),即Object类是每个类的超类(父类),所有的类,包括数组都实现了该类中的方法。此类自JDK1.0就有了。

构造对象,只提供了一个空参构造对象(没有重载),去看源码,发现源码中没有给出。这似乎符合Java的规则,Java中构造函数不可以被继承(只是隐式或显式调用),而当某个类没有自定义构造函数时,java会默认添加一个空参构造函数,这应该就是隐式地调用了父类的构造函数。

protected Object clone() 创建并返回此对象的一个副本。
protected native Object clone() throws CloneNotSupportedException;

boolean equals(object obj) 判断其他对象是否等于当前对象,一般子类都会重写此方法来实现自己的功能。

public boolean equals(Object obj) {
return (this == obj);
}
有一些面试题会问到equals()方法与==有什么不同。

protected void finalize() 被GC(垃圾收集器)调用,当GC发现该对象没有引用时。这个地方,有两个很有趣的地方,一是告诉了我们GC的工作原理,当一个对象不再有引用时,GC就将其回收,二是体现了面向对象的思想,只有对象本身知道自己的情况,外部想要实现功能,就要通过对象来调用。

protected void finalize() throws Throwable { }


Class<?> getClass(),返回此对象的运行时类。这个方法跟泛型有点关系(<?>),而且返回值类型就是Class。详细Class类介绍请看深入理解Class类

public final native Class<?> getClass();

int hashCode() 返回当前对象的哈希值。equals方法比较就是比较的哈希值,更多hashCode请参考wikipedia之java
hashCode。

public native int hashCode();

void notify() 唤醒一个等待当前对象监视器的线程。当某个线程以此对象为锁时,调用notify方法,可将其唤醒,给予其竞争执行权的资格。

public final native void notify();
void notifyAll() 唤醒所有等待当前对象监视器的线程,字面意思理解即可。

public final native void notifyAll();

String toString() 返回该对象的字符串表达式。当我们打印一个对象时,打印的内容即时调用此方法后得到的字符串表达式。

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

它就是返回“类名@hashCode(十六进制)”。

void wait()

void wait(long timeout)

void wait(long timeout, int nanos)

重载了三个不同参数列表的wait()方法,用来使当前线程停下来,直到notify()或者notifyAll()信号发出。

去参照源码,发现还是有些地方API document里面没提到的。

private static native void registerNatives();
static {
registerNatives();
}


首先声明了一个私有的,静态的,本地的方法,然后调用静态代码块执行,注意本地方法是与平台有关的,与其他编程语言有关的。静态代码块的执行顺序优于构造函数,原因是静态代码块随类加载而执行,构造函数只有实例化对象的时候才开始执行。

还有一个很有趣的地方是,Object类是非abstract类,而Object类是所有类的超类,说明abstract类也继承了Object类,进而说明abstract类可以继承具体类。

希望能做个有心人,从不同角度看问题,发现问题的多维面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: