繁体   English   中英

为什么Unsafe.allocateInstance(Class.class)失败?

[英]Why Unsafe.allocateInstance(Class.class) failed?

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

unsafe.allocateInstance(Class.class)

发生了

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

既然Class是一个非抽象类,为什么它如此特别? 并且有什么方法可以构造一个像allocateInstance这样的“空” Class吗?

因为在HotSpot JVM内部进行了显式检查,以确保无法通过JNI,Unsafe等实例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());
  }
}

这样的实例无论如何都是无效的,因此没有任何意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM