package java.lang;
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
/注册本地方法,即初始化java方法映射到c方法/
public final native Class<?> getClass();
/本地方法,返回一个对象运行时类/
eg: 类B继承类A,
A s=new B();
System.out.println(s.getClass()); //输出结果为B
public native int hashCode();
/本地方法,返回一个hash值/
在程序执行期间,只要equals方法比较操作用到的信息没有没修改,则对同一对象调用多次,hashcode方法返回的整数必定为同一整数;如果两个对象比较的equals方法相同,则调用hashcode方法返回的两个整数必定相同;如果;两个对象比较的equals方法不相同,则调用hashcode方法返回的两个整数不一定不相同。
public boolean equals(Object obj) {
return (this == obj);
}
/equals方法最根本的实现为==/
如果equals方法没有重写的话,它就和==比较的结果完全一样,如果重写了,在String类中,重写的equals方法比较的是内容,而“==”比较的是地址,可以片面的认为,重写的equals方法比较内容,不比较地址。
protected native Object clone() throws CloneNotSupportedException;
/本地方法,浅克隆/
调用该克隆方法必须要实现cloneable接口
浅克隆与深克隆相同点及不同点
浅克隆:仅仅复制它所考虑的对象,而不考虑它所引用的对象;
深克隆:它所考虑的对象和它所引用的对象都复制一份。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
/返回信息,经常被重写 @Override/
public final native void notify();
/本地方法,唤醒一个在当前监视器上等待的线程/
public final native void notifyAll();
/本地方法,唤醒所有在当前监视器上等待的线程/
public final native void wait(long timeout) throws InterruptedException;
/本地方法,会抛出中断异常(InterruptedException),调用时要用try、catch捕捉/
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 > 0) {
timeout++;
}
wait(timeout);
}
/会抛出中断异常(InterruptedException),调用时要用try、catch捕捉/
public final void wait() throws InterruptedException {
wait(0);
}
/本地方法,会抛出中断异常(InterruptedException),调用时要用try、catch捕捉/
protected void finalize() throws Throwable { }
/这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们不会用new以外的方式去创建对象),所以一般是不需要程序员去实现finalize的。/
C++有析构函数,能够很好地在对象销毁前做一些释放外部资源的工作,但是java没有。Object.finalize()提供了与析构函数类似的机制,但是它不安全、会导致严重的内存消耗和性能降低,应该避免使用。
}