3

我正在阅读这篇文章,它说

Objectclone方法非常棘手。它基于现场副本,并且是“语言外的”。它创建一个对象而不调用构造函数”。

我在grep 代码中看到的是以下行:

protected native Object clone() throws CloneNotSupportedException;

我在这里想念什么?

4

4 回答 4

5

您缺少native这意味着它是在非 Java 代码中实现的(在这种情况下,它是在 JVM 本身中实现的)。

那是因为clone 不能在 Java 代码中实现的确切功能(这使得它很成问题)。

于 2012-07-05T14:48:35.643 回答
4

native关键字表示实现是本机(非Java)代码。

于 2012-07-05T14:48:12.117 回答
4

首先,为了更好地理解背后的概念,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
于 2012-07-05T14:48:32.177 回答
2

该方法被标记为native,因此您看不到它的实现,因为它不在Java.

于 2012-07-05T14:48:40.973 回答