1. 普通的构造方法反射新建对象的方式
//JSONObject object = new JSONObject();
jclass json_object_class = env->FindClass("org/json/JSONObject");
jmethodID methodId = env->GetMethodID(json_object_class, "<init>", "()V");
jobject json_object = env->NewObject(json_object_class, methodId);
2. 对于下面这种主动抛异常的构造方法,采用如下方式生成实例
public class DESKeySpec implements java.security.spec.KeySpec {
...
public DESKeySpec(byte[] key) throws InvalidKeyException {
this(key, 0);
}
...
}
//DESKeySpec dks = new DESKeySpec(KEY.getBytes());
jclass des_key_spec_class = env->FindClass("javax/crypto/spec/DESKeySpec");
methodId = env->GetMethodID(des_key_spec_class, "<init>", "([B)V");
//这里采用AllocObject方式生成实例
jobject des_key_spec = env->AllocObject(des_key_spec_class);
env->CallVoidMethod(des_key_spec, methodId, keyArray);
env->DeleteLocalRef(keyArray);
env->DeleteLocalRef(des_key_spec_class);
//清除抛出的异常
if (env->ExceptionOccurred()) {
env->ExceptionClear();
}