技术小菜鸟 发表于 2013-11-14 14:12

类加载findClass方法的疑惑

我想弱弱的问下Java的类加载中为什么要鼓励重写findClass(String)方法,findClass方法原来的实现方式是什么样的呢?求懂这个的大神指导一下!

ddd010 发表于 2013-11-28 21:56

第一点,我没有听说过。

给你一个openjdk6的实现:
......
/* Macro to get JNI function pointer. */
#define JNI_FUNC_PTR(env,f) (*((*(env))->f))

/* Macro to get JVM function pointer. */
#define JVM_FUNC_PTR(env,f) (*((*(env))->f))

/* Macro to get JVMTI function pointer. */
#define JVMTI_FUNC_PTR(env,f) (*((*(env))->f))
.....
static jclass
findClass(JNIEnv *env, const char * name)
{
    jclass x;

    if ( env == NULL ) {
      EXIT_ERROR(AGENT_ERROR_ILLEGAL_ARGUMENT,"findClass env");
    }
    if ( name == NULL || name == 0 ) {
      EXIT_ERROR(AGENT_ERROR_ILLEGAL_ARGUMENT,"findClass name");
    }
    x = JNI_FUNC_PTR(env,FindClass)(env, name);
    if (x == NULL) {
      ERROR_MESSAGE(("JDWP Can't find class %s", name));
      EXIT_ERROR(AGENT_ERROR_NULL_POINTER,NULL);
    }
    if ( JNI_FUNC_PTR(env,ExceptionOccurred)(env) ) {
      ERROR_MESSAGE(("JDWP Exception occurred finding class %s", name));
      EXIT_ERROR(AGENT_ERROR_NULL_POINTER,NULL);
    }
    return x;
}
页: [1]
查看完整版本: 类加载findClass方法的疑惑