Top


定義場所(file name)

hotspot/src/share/vm/runtime/javaCalls.cpp

名前(function name)

void JavaCalls::call_default_constructor(JavaThread* thread, methodHandle method, Handle receiver, TRAPS) {

本体部(body)

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(method->name() == vmSymbols::object_initializer_name(),    "Should only be called for default constructor");
      assert(method->signature() == vmSymbols::void_method_signature(), "Should only be called for default constructor");

  {- -------------------------------------------
  (1) (変数宣言など)
      ---------------------------------------- -}

      instanceKlass* ik = instanceKlass::cast(method->method_holder());

  {- -------------------------------------------
  (1) JavaCalls::call() で, 実際の呼び出し処理を行う.

      (ただし, 対象のオブジェクトのクラスが完全に初期化が終わっており, かつ
       コンストラクタがデフォルトのもの(何もしないコンストラクタ)であれば
       呼び出しても意味は無いので, 何もしない)
      ---------------------------------------- -}

      if (ik->is_initialized() && ik->has_vanilla_constructor()) {
        // safe to skip constructor call
      } else {
        static JavaValue result(T_VOID);
        JavaCallArguments args(receiver);
        call(&result, method, &args, CHECK);
      }
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.