关于Java基类Object

来源:互联网 发布:淘宝活动广场在哪 编辑:程序博客网 时间:2024/06/05 16:36

 java.lang.Object,Object是Java所有类的祖先类(父类)

1.首先看object源码JDK1.7(oracle)

publicclassObject {
//本地方法,C/C++在DLL中实现,通过JNI调用
privatestaticnativevoidregisterNatives();
//类初始化调用此方法
static {
registerNatives();
}
//返回此Object的运行时类(每个类的Class类对象)
publicfinalnative Class<?> getClass();
//获得该对象的hash值
publicnativeinthashCode();
//对比两对象的内存地址,如果不重写,equals方法比较的是对象地址
publicbooleanequals(Object obj) {
return (this == obj);
}
//本地clone方法,用于对象的赋值
protectednative Object clone()throws CloneNotSupportedException;
//返回对象的的字符串表示,默认是:类名+@+hash值
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());

//notify()/notifyAll()/wait()以及wait两个重载方法都是线程同步相关方法
publicfinalnativevoidnotify();
publicfinalnativevoidnotifyAll();
publicfinalnativevoidwait(long timeout) throws InterruptedException;
publicfinalvoidwait(long timeout, int nanos) throws InterruptedException {
if (timeout < 0) {
thrownew IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
thrownew IllegalArgumentException("nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
timeout++;
}
wait(timeout);
}
publicfinalvoidwait()throws InterruptedException {
wait(0);
}

//对象被回收时调用,不管如何,一个对象只调用一次
protectedvoidfinalize()throws Throwable {}



可见object中拥有native,hashCode,euqals,clone,toString,wait,notify,notifyAll,finalize这几个方法,其中常用的方法有

equals,toString,以及线程中常常调用的wait,notify,notyfiAll方法。

另外:

源码中并没有Object的构造方法,但是,同样的,编译器在编译期间会给Object(事实上,所有的Java类,只要类中没有

构造方法,编译器都会默认的给一个空构造方法,若已有构造方法,则不会添加)一个默认的空的构造方法

public Object(){}

带有native修饰的都是本地方法,所谓的本地方法是不通过Java语言实现的方法,但可以通过JNI,像调用Java方法一样调用

这些方法。详细的可以搜索查看JNI。 这个方法的作用是对Object以下几个本地方法(hashCode/clone/notify等)进行注册

(可以理解为,这个方法是告诉JVM这几个本地方法的实现映射),每一个有本地方法的都会有这个方法,但其内容不一样

(因为注册的方法不一样嘛)。 
原创粉丝点击