Top


定義場所(file name)

hotspot/src/share/vm/oops/instanceKlass.cpp

名前(function name)

void instanceKlass::check_valid_for_instantiation(bool throwError, TRAPS) {

本体部(body)

  {- -------------------------------------------
  (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.