一、前言
工作了两年多发现自己的水平提高有限,趁有时间阅读一下源码提高一下自己,也沉淀一下技术。那么就先从jdk的源码开始吧。
二、Object类
Object 类属于 java.lang 包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。Object 类是所有类的基类,当一个类没有直接继承某个类时,默认继承Object类,也就是说任何类都直接或间接继承此类,Object 类中能访问的方法在所有类中都可以调用。
构造方法
- 系统默认创造一个无参构造方法
registerNatives 方法
// 类加载时注册native方法
private static native void registerNatives();
static {
registerNatives();
}
equals()
public boolean equals(Object obj) {
return (this == obj);
}
在 Object 类中,== 运算符和 equals 方法是等价的,都是比较两个对象的引用是否相等,对于我们自定义的一个对象,如果不重写 equals 方法,那么在比较对象的时候就是调用 Object 类的 equals 方法
getClass()
public final native Class<?> getClass();
该方法的作用是返回一个对象的运行时类,通过这个类对象我们可以获取该运行时类的相关属性和方法,也就是java中的反射,各种通用的框架都是利用反射来实现的。
hashCode()
public native int hashCode();
toString()
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
getClass().getName()是返回对象的全类名(包含包名),Integer.toHexString(hashCode()) 是以16进制无符号整数形式返回此哈希码的字符串表示形式。