hotspot/src/share/vm/oops/instanceKlass.cpp
void instanceKlass::check_valid_for_instantiation(bool throwError, TRAPS) {
{- -------------------------------------------
(1) 以下の条件に該当する場合は, 例外を出す. (該当しなければ何もせずに終了)
(java.lang.Class クラスについては, HotSpot 内部でしか instantiate されないはずで,
コンストラクタも private 宣言されているので,
Class クラスを instantiate しようとしていたらエラー)
* インターフェイスだったり abstract なクラスの場合:
InstantiationError もしくは InstantiationException
(引数の throwError が true なら InstantiationError, そうでなければ InstantiationException)
* java.lang.Class の場合:
IllegalAccessError もしくは IllegalAccessException
(引数の throwError が true なら IllegalAccessError, そうでなければ IllegalAccessException)
---------------------------------------- -}
if (is_interface() || is_abstract()) {
ResourceMark rm(THREAD);
THROW_MSG(throwError ? vmSymbols::java_lang_InstantiationError()
: vmSymbols::java_lang_InstantiationException(), external_name());
}
if (as_klassOop() == SystemDictionary::Class_klass()) {
ResourceMark rm(THREAD);
THROW_MSG(throwError ? vmSymbols::java_lang_IllegalAccessError()
: vmSymbols::java_lang_IllegalAccessException(), external_name());
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.