我正在阅读this文章并且说
Object
的{{1}}方法非常棘手。它基于现场副本,而且是“超语言”。它创建一个对象而不调用构造函数“。
我在grep code中看到的只有以下几行:
clone
我在这里缺少什么?
答案 0 :(得分:5)
你错过了native
,这意味着它是在非Java代码中实现的(在这种情况下,它是在JVM本身中实现的)。
那是因为clone
的确切功能不能在Java代码中实现(这使它成为问题)。
答案 1 :(得分:4)
native
关键字表示实现是本机(非Java)代码。
答案 2 :(得分:4)
首先,要真正理解 clone
背后的概念,我建议更好地回答问题:How to properly override clone method?
关于您提出的问题的源代码:
native
在这里意味着,这是一种不是用Java实现的方法,而是使用另一种语言,通常是C或C ++。它仍然是JVM的一部分,因此您可以在<{p>中的OpenJDK™ Source Release中找到实际的实现
"openjdk/hotspot/src/share/vm/prims/jvm.cpp":539
JVM_ENTRY(jobject, JVM_Clone(JNIEnv* env, jobject handle))
JVMWrapper("JVM_Clone");
Handle obj(THREAD, JNIHandles::resolve_non_null(handle));
const KlassHandle klass (THREAD, obj->klass());
JvmtiVMObjectAllocEventCollector oam;
.
.
.
JVM_END
答案 3 :(得分:2)
该方法标记为native
,因此您无法查看其实现,因为它不在Java
中。