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() 创建并返回此对象的一个副本。
boolean equals(object obj) 判断其他对象是否等于当前对象,一般子类都会重写此方法来实现自己的功能。
protected void finalize() 被GC(垃圾收集器)调用,当GC发现该对象没有引用时。这个地方,有两个很有趣的地方,一是告诉了我们GC的工作原理,当一个对象不再有引用时,GC就将其回收,二是体现了面向对象的思想,只有对象本身知道自己的情况,外部想要实现功能,就要通过对象来调用。
Class<?> getClass(),返回此对象的运行时类。这个方法跟泛型有点关系(<?>),而且返回值类型就是Class。详细Class类介绍请看深入理解Class类。
public final native Class<?> getClass();
int hashCode() 返回当前对象的哈希值。equals方法比较就是比较的哈希值,更多hashCode请参考wikipedia之java
hashCode。
void notify() 唤醒一个等待当前对象监视器的线程。当某个线程以此对象为锁时,调用notify方法,可将其唤醒,给予其竞争执行权的资格。
String toString() 返回该对象的字符串表达式。当我们打印一个对象时,打印的内容即时调用此方法后得到的字符串表达式。
它就是返回“类名@hashCode(十六进制)”。
void wait()
void wait(long timeout)
void wait(long timeout, int nanos)
重载了三个不同参数列表的wait()方法,用来使当前线程停下来,直到notify()或者notifyAll()信号发出。
去参照源码,发现还是有些地方API document里面没提到的。
首先声明了一个私有的,静态的,本地的方法,然后调用静态代码块执行,注意本地方法是与平台有关的,与其他编程语言有关的。静态代码块的执行顺序优于构造函数,原因是静态代码块随类加载而执行,构造函数只有实例化对象的时候才开始执行。
还有一个很有趣的地方是,Object类是非abstract类,而Object类是所有类的超类,说明abstract类也继承了Object类,进而说明abstract类可以继承具体类。
希望能做个有心人,从不同角度看问题,发现问题的多维面。
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类可以继承具体类。
希望能做个有心人,从不同角度看问题,发现问题的多维面。
相关文章推荐
- 深入Objective-C的动态特性
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等
- iOS NSObject 的 isa 属性的类型 Class
- 关于NSObject类的description方法和isEqual/==
- 调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array
- Objective-C Associated Objects 的实现原理
- object-c中多态
- Objective-C改变push、pop动画为模态效果
- object-c中类的继承
- 【深度学习-RNN】Rich feature hierarchies for accurate object detection and semantic segmentation笔记
- IOS-慎用dictionaryWithObjectsAndKeys方法
- 关于C++和Objective-C混编
- org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
- [Objective-c开源库]HHRouter
- Objective-C代码行数统计
- Object类
- objective-c - 基础篇 - KVO键值转换设计模式
- 内存管理(16.5.10)
- Ubuntu下如何安装并使用Objective-C
- object-c中get/set方法