Object是所有类的父类,在JDK1.0的时候就有了,在java.lang这个包中。在源码中,它有很多方法都用到了native修饰,通过native修饰,这些方法就可以调用非Java代码的接口。又体会到了Java跨平台的一些原因了。
下面我们来看看Object类里有哪些方法。
1、public final native Class<?> getClass();
返回这个对象运行时的类,返回的类的对象是被静态同步方法锁定的表示类的方法。
2、public native int hashCode();
为这个对象返回一个哈希代码值,这个方法的好处就是支持hash tables能够提供像HashMap的类。
3、public boolean equals(Object obj){return (this == obj);}
指明其他对象是否“equal to ”当前这个对象。
4、protected native Object clone() throws CloneNotSupportedException;
添加并返回一个当前对象的复制。准确地说“复制”是让这个类依赖被复制的对象。
5、public String toString(){return getClass().getName() + "@" + Integer.toHexString(hashCode());}
返回一个表示这个对象的字符串。一般而言,toString方法返回一个“文本表示”对象的字符串。结果应该一个简洁但是有用、读者容易阅读的信息。建议是所有的子类都继承这个方法。
toString方法为Object类返回一个由字符串组成的类的名称的实例对象,符号“@”和无符号的十六进制表示这个哈希代码对象。换句话说,这个方法返回一个字符串匹配值。
6、public final native void notify();
唤醒一个正在等待这个对象的监视器的单线程。如果有线程等待这个对象,则选择它们其中的一个唤醒。这个选择在执行是任意的和再现的(翻译得有些不通)。一个线程通过调用等待的方法来等待一个对象监视器。
被唤醒的线程不能立即执行,直到当前运行的线程对这个对象解锁。被唤醒的线程通常以竞争的方式与其他同步线程竞争这个对象。例如:被唤醒的线程在成为下一个锁定这个对象时它是没有权利或条件去锁住这个对象的。(也就是说它只有抢到了,它才能给这个对象加锁)。
这个方法应该只有一个线程来调用,这个对象时这个对象监视器的所有者。一个线程成为对象监视器的所有者有三种方式:
.通过执行一个同步对象的实例方法
.通过执行同步在对象上一个同步声明的主体
.对于类型类的对象,通过执行该类同步静态方法
7、public final native void nofifyAll();
唤醒所有正在等待这个对象监视器的线程。一个线程通过调用一个等待方法来等待一个对象监视器。
8、public final native void wait(long timeout)throws InterruptedException;
由于当前线程等待其他线程调用notify()方法或notifyAll()方法娥对象,或是一个指定的时间运行。
9、public final native void wait(long timeout,int nanos) throws InterruptedException;
10、public final native void wait() throws InterruptedException;
11、protected void finalize() throws Throwable;
当垃圾收集决定不再有对对象的引用时,垃圾收集器将调用对象上的垃圾收集器。子类覆盖最终处理系统资源或执行其他清理的方法。
总结
初次尝试翻译源文档,真的好吃力啊。