java.lang.Object,Object是Java所有类的祖先类(父类)
1.首先看object源码
JDK1.7(oracle):
public
class
Object {
//本地方法,C/C++在DLL中实现,通过JNI调用
private
static
native
void
registerNatives();
//类初始化调用此方法
static
{
registerNatives();
}
//返回此Object的运行时类(每个类的Class类对象)
public
final
native
Class<?> getClass();
//获得该对象的hash值
public
native
int
hashCode();
//对比两对象的内存地址,如果不重写,equals方法比较的是对象地址
public
boolean
equals(Object
obj) {
return
(this
== obj);
}
//本地clone方法,用于对象的赋值
protected
native
Object clone()
throws
CloneNotSupportedException;
//返回对象的的字符串表示,默认是:类名+@+hash值
public
String toString()
{
return
getClass().getName() + "@"
+ Integer.toHexString(hashCode());
//notify()/notifyAll()/wait()以及wait两个重载方法都是线程同步相关方法
public
final
native
void
notify();
public
final
native
void
notifyAll();
public
final
native
void
wait(long
timeout) throws
InterruptedException;
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 >= 500000
|| (nanos != 0
&& timeout == 0))
{
timeout++;
}
wait(timeout);
}
public
final
void
wait()
throws
InterruptedException {
wait(0);
}
//对象被回收时调用,不管如何,一个对象只调用一次
protected
void
finalize()
throws
Throwable {}
可见object中拥有native,hashCode,euqals,clone,toString,wait,notify,notifyAll,finalize这几个方法,其中常用的方法有
equals,toString,以及线程中常常调用的wait,notify,notyfiAll方法。
另外:
源码中并没有Object的构造方法,但是,同样的,编译器在编译期间会给Object(事实上,所有的Java类,只要类中没有
构造方法,编译器都会默认的给一个空构造方法,若已有构造方法,则不会添加)一个默认的空的构造方法
带有native修饰的都是本地方法,所谓的本地方法是不通过Java语言实现的方法,但可以通过JNI,像调用Java方法一样调用
这些方法。详细的可以搜索查看JNI。 这个方法的作用是对Object以下几个本地方法(hashCode/clone/notify等)进行注册
(可以理解为,这个方法是告诉JVM这几个本地方法的实现映射),每一个有本地方法的都会有这个方法,但其内容不一样
(因为注册的方法不一样嘛)。
本文深入解析Java的基础类Object,探讨其核心方法如equals、toString及线程同步相关方法的内部实现,并介绍了本地方法的使用。
335

被折叠的 条评论
为什么被折叠?



