3

私はこの記事を読んでいて、それは言う

Objectclone方法は非常にトリッキーです。これはフィールド コピーに基づいており、「言語外」です。コンストラクターを呼び出さずにオブジェクトを作成します。」

grep コードに表示されるのは、次の行だけです。

protected native Object clone() throws CloneNotSupportedException;

ここで何が欠けていますか?

4

4 に答える 4

5

nativeJava 以外のコードで実装されていることを意味します (この場合、JVM 自体に実装されています) 。

これは、 の正確な機能をJava コードで実装clone できないためです (これが非常に問題になります)。

于 2012-07-05T14:48:35.643 に答える
4

nativeキーワードは、実装がネイティブ (非 Java) コードであることを示します。

于 2012-07-05T14:48:12.117 に答える
4

まず第一に、背後にある概念をよりよく理解cloneするために、次の質問への回答をお勧めします:クローン メソッドを適切にオーバーライドするには?

あなたが質問に入れたソースコードに関して:

nativeここで、これは Java ではなく別の言語 (多くの場合 C または C++) で実装されているメソッドであることを意味します。これはまだ JVM の一部であるため、実際の実装はOpenJDK™ ソース リリースで確認できます。

"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 に答える