私はこの記事を読んでいて、それは言う
Object
のclone
方法は非常にトリッキーです。これはフィールド コピーに基づいており、「言語外」です。コンストラクターを呼び出さずにオブジェクトを作成します。」
grep コードに表示されるのは、次の行だけです。
protected native Object clone() throws CloneNotSupportedException;
ここで何が欠けていますか?
native
Java 以外のコードで実装されていることを意味します (この場合、JVM 自体に実装されています) 。
これは、 の正確な機能をJava コードで実装clone
できないためです (これが非常に問題になります)。
native
キーワードは、実装がネイティブ (非 Java) コードであることを示します。
まず第一に、背後にある概念をよりよく理解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
メソッドは としてマークされてnative
いるため、 にないため、その実装を確認できませんJava
。