使用构造器反射对象实例
private static native Object newInstance0(Constructor<?> c, Object[] args)throws InstantiationException,IllegalArgumentException,InvocationTargetException;
newInstance0底层实现逻辑
jvm源码
JNIEXPORT jobject JNICALL Java_jdk_internal_reflect_NativeConstructorAccessorImpl_newInstance0
(JNIEnv *env, jclass unused, jobject c, jobjectArray args)
{return JVM_NewInstanceFromConstructor(env, c, args);
}
jvm.cpp实现这个方法JVM_NewInstanceFromConstructor
JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjectArray args0))JVMWrapper("JVM_NewInstanceFromConstructor");oop constructor_mirror = JNIHandles::resolve(c);objArrayHandle args(THREAD, objArrayOop(JNIHandles::resolve(args0)));oop result = Reflection::invoke_constructor(constructor_mirror, args, CHECK_NULL);jobject res = JNIHandles::make_local(env, result);if (JvmtiExport::should_post_vm_object_alloc()) {JvmtiExport::post_vm_object_alloc(JavaThread::current(), result);}return res;
JVM_END