有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么不安全。allocateInstance(Class.Class)失败?

我现在用的是不安全的。当我运行以下代码时:

unsafe.allocateInstance(Class.class)

发生了什么事

Exception in thread "main" java.lang.IllegalAccessException: java.lang.Class

既然Class是一个非抽象类,为什么它如此特殊?有没有办法构造一个类似Class的空的allocateInstance


共 (1) 个答案

  1. # 1 楼答案

    因为在HotSpot JVM中有一个显式检查,以确保不能通过JNI、不安全等实例化java.lang.Class。请参见instanceKlass.cpp

    void InstanceKlass::check_valid_for_instantiation(bool throwError, TRAPS) {
      if (is_interface() || is_abstract()) {
        ResourceMark rm(THREAD);
        THROW_MSG(throwError ? vmSymbols::java_lang_InstantiationError()
                  : vmSymbols::java_lang_InstantiationException(), external_name());
      }
      if (this == SystemDictionary::Class_klass()) {
        ResourceMark rm(THREAD);
        THROW_MSG(throwError ? vmSymbols::java_lang_IllegalAccessError()
                  : vmSymbols::java_lang_IllegalAccessException(), external_name());
      }
    }
    

    这样的实例无论如何都是无效的,所以没有意义