面试题 Java

有12个方法

Object类是Java中所有类的基类。位于java.lang包中

https://cdn.nlark.com/yuque/0/2021/jpeg/576791/1634200468619-028d48cc-2847-4f1c-8c0a-8e77ac30a143.jpeg

先看下 Object 的类结构(快捷键 Windows:alt+7,Mac:command + 7):

https://cdn.nlark.com/yuque/0/2020/png/576791/1600785192438-3e874183-5a9e-4234-a12e-923092ab054d.png#height=449&id=tXdIU&originHeight=898&originWidth=1004&originalType=binary&ratio=1&size=104929&status=done&style=none&width=502

1. registerNatives()

    private static native void registerNatives();
    static {
        registerNatives();
    }

这个代码有static代码块,那么在一开始就会被加载,其目的是为该类中包含的除了registerNatives()方法以外的所有本地方法进行注册。 由于Object类中大量使用了native方法,一个Java程序要想调用一个本地方法,需要执行两个步骤:第一,通过System.loadLibrary()将包含本地方法实现的动态文件加载进内存;第二,当Java程序需要调用本地方法时,虚拟机在加载的动态文件中定位并链接该本地方法,从而得以执行本地方法。registerNatives()方法的作用就是取代第二步,让程序主动将本地方法链接到调用方,当Java程序需要调用本地方法时就可以直接调用,而不需要虚拟机再去定位并链接。 使用registerNatives()方法主要有如下三点好处:

此外,通过registerNatives()方法,在定义本地方法实现的时候,可以不遵守JNI命名规范。 此处是有关类加载器及JNI的根深层次的内容,此处暂不展开。

(非重点)

2. getClass 方法

public final native Class<?> getClass();

final 方法、获取对象的运行时 class 对象,class 对象就是描述对象所属类的对象。该方法返回的是此Object对象的类对象/运行时类对象Class。效果与Object.class相同。这个方法通常是和 Java 反射机制搭配使用的。(注意:回答这里时可能会引出类加载,反射等知识点的提问)

3. hashCode 方法

public native int hashCode();

该方法主要用于获取对象的散列值。Object 中该方法默认返回的是对象的堆内存地址。(可能引出hashmap实现原理的提问)