我正在阅读这篇文章,它说
Object
的clone
方法非常棘手。它基于现场副本,并且是“语言外的”。它创建一个对象而不调用构造函数”。
我在grep 代码中看到的是以下行:
protected native Object clone() throws CloneNotSupportedException;
我在这里想念什么?
您缺少native
这意味着它是在非 Java 代码中实现的(在这种情况下,它是在 JVM 本身中实现的)。
那是因为clone
不能在 Java 代码中实现的确切功能(这使得它很成问题)。
native
关键字表示实现是本机(非Java)代码。
首先,为了更好地理解背后的概念,clone
我推荐这个问题的答案:如何正确覆盖克隆方法?
关于您提出的问题的源代码:
native
这里的意思是,这是一种方法,它不是用 Java 实现的,而是用另一种语言实现的,通常是 C 或 C++。它仍然是 JVM 的一部分,因此您可以在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
该方法被标记为native
,因此您看不到它的实现,因为它不在Java
.