面试题 Java
有12个方法
Object类是Java中所有类的基类。位于java.lang包中
先看下 Object 的类结构(快捷键 Windows:alt+7,Mac:command + 7):
private static native void registerNatives();
static {
registerNatives();
}
这个代码有static代码块,那么在一开始就会被加载,其目的是为该类中包含的除了registerNatives()方法以外的所有本地方法进行注册。 由于Object类中大量使用了native方法,一个Java程序要想调用一个本地方法,需要执行两个步骤:第一,通过System.loadLibrary()将包含本地方法实现的动态文件加载进内存;第二,当Java程序需要调用本地方法时,虚拟机在加载的动态文件中定位并链接该本地方法,从而得以执行本地方法。registerNatives()方法的作用就是取代第二步,让程序主动将本地方法链接到调用方,当Java程序需要调用本地方法时就可以直接调用,而不需要虚拟机再去定位并链接。 使用registerNatives()方法主要有如下三点好处:
此外,通过registerNatives()方法,在定义本地方法实现的时候,可以不遵守JNI命名规范。 此处是有关类加载器及JNI的根深层次的内容,此处暂不展开。
(非重点)
public final native Class<?> getClass();
final 方法、获取对象的运行时 class 对象,class 对象就是描述对象所属类的对象。该方法返回的是此Object对象的类对象/运行时类对象Class。效果与Object.class相同。这个方法通常是和 Java 反射机制搭配使用的。(注意:回答这里时可能会引出类加载,反射等知识点的提问)
public native int hashCode();
该方法主要用于获取对象的散列值。Object 中该方法默认返回的是对象的堆内存地址。(可能引出hashmap实现原理的提问)