Object类中的clone()实现

时间:2012-07-05 14:45:51

标签: java clone

我正在阅读this文章并且说

  

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

我在grep code中看到的只有以下几行:

clone

我在这里缺少什么?

4 个答案:

答案 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中。