1.Java.lang包之Object类
Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。
Object类没有定义属性,一共有13个方法,具体的类定义结构如下图:
1.private static native void registerNatives()
registerNatives函数前面有native关键字修饰,Java中,用native关键字修饰的函数表明该方法的实现并不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。方法的具体实现体在dll文件中,对于不同平台,其具体实现应该有所不同。用native修饰,即表示操作系统,需要提供此方法,Java本身需要使用。具体到registerNatives()方法本身,其主要作用是将C/C++中的方法映射到Java中的native方法,实现方法命名的解耦。
2.public final native Class<?> getClass()
getClass函数前面有native关键字修饰,Java中,用native关键字修饰的函数表明该方法的实现并不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。返回这个运行类。
3.public native int hashCode()
getClass函数前面有native关键字修饰,Java中,用native关键字修饰的函数表明该方法的实现并不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。返回这个类的哈希码。实际上,由 Object 类定义的 hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现的,但是 JavaTM 编程语言不需要这种实现技巧。)
4.public boolean equals(Object obj)
指示其他某个对象是否与此对象“相等”。默认比较地址是非相等。建议所有方法中都要重写此方法。
每个类,在内存中的字节码是一样的,每个对象是类的实例。
5.protected native Object clone()
clone函数前面有native关键字修饰,Java中,用native关键字修饰的函数表明该方法的实现并不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。创建并返回次对象副本。
clone函数属于浅度克隆,如Student对象想要在其他类中被克隆,其必须实现Cloneable接口(内无实现方法,属于标记接口)并重写Objec类的clone方法(否者在其他类中无法调用clone方法)。
6.public String toString()
返回该对象的字符串表示。getClass().getName() + "@" + Integer.toHexString(hashCode())。