我有这样的代码:
public class QueueSample {
public static void main(String[] args) {
System.out.println(new QueueSample().getClass());
}
}
打印:
class QueueSample
getClass()
方法来自Object
类。查看Object
的源代码,我只能看到这样的方法定义:
public final native Class<?> getClass();
如果没有在这里实现,这个方法在哪里以及如何实现?
答案 0 :(得分:6)
正如@TheLostMind所提到的,您可以从OpenJDK获取源代码 - 查看有点newer version (JDK9),getClass()
本机方法实现如
JNIEXPORT jclass JNICALL
Java_java_lang_Object_getClass(JNIEnv *env, jobject this)
{
if (this == NULL) {
JNU_ThrowNullPointerException(env, NULL);
return 0;
} else {
return (*env)->GetObjectClass(env, this);
}
}
因此,基本上它所做的是委托给JVM的环境并使用GetObjectClass()
函数返回Class
对象。您可以将此作为起点 - 如果您想深入了解,我建议您使用mercurial从http://hg.openjdk.java.net/查看JDK源代码,以便浏览它。
正如@Holger所提到的,在使用JTP编译器(如热点)时会有一些性能优化 - 例如,Performance techniques used in the Hotspot JVM表示&#34; Object.getClass()
是一个或两个指令。&#34; 。这意味着上面的代码显示了Object.getClass()
的一种可能实现,但是这个实现可能在运行时和/或基于实际的JVM(解释/ JITted,客户端/服务器,Oracle标准/ JRockit,... 。)