什么时候在java中调用构造函数?

时间:2012-03-05 13:21:00

标签: java

何时调用构造函数?

  1. 在创建对象之前。
  2. 在对象创建期间。
  3. 创建对象后。

10 个答案:

答案 0 :(得分:20)

分配对象内存,初始化具有初始值的字段变量,然后调用构造函数,但其​​代码在对象超类的构造函数代码之后执行。

答案 1 :(得分:6)

在字节码级别。

  1. 创建对象但未初始化。
  2. 调用构造函数,将对象作为this
  3. 传递
  4. 当构造函数返回时,对象是完全构造/创建的。
  5. 注意:字节代码级别的构造函数包含变量的初始值和Java构造函数中的代码。 e.g。

    int a = -1;
    int b;
    
    Constructor() {
       super();
       b = 2;
    }
    

    相同
    int a;
    int b;
    
    Constructor() {
       super();
       a = -1;
       b = 2;
    }
    

    另请注意:在初始化类的任何部分之前,始终会调用super()。


    在某些JVM上,您可以创建一个对象,而无需使用Unsafe.allocateInstance()进行初始化。如果以这种方式创建对象,则无法调用构造函数(不使用JNI),但可以使用反射来初始化每个字段。

答案 2 :(得分:4)

在对象创建时调用它。必须首先为对象保留内存,否则构造函数代码无法运行。也许我们可以在创建对象后说出来。还要注意,在构造函数代码之前调用类中编写的初始化代码。

public Ex {

    int xVal = -1;
    int yVal;

    public Ex() {
        // xVal is already -1.
        //yVal defaults to 0.
    }
}

答案 3 :(得分:2)

JVM将首先为您的对象分配内存,然后初始化所有字段,然后调用您的构造函数。

答案 4 :(得分:1)

在创建新对象时调用构造函数。

NewObject n = new NewObject();

public class NewObject {
    public NewObject() {
        // do stuff when object created
    }
}

希望这有帮助。

答案 5 :(得分:1)

除了默认构造函数的情况之外,基本上调用构造函数来初始化实例变量的值。但是,实例变量的初始化分4步完成(如适用):

  1. 变量初始化为默认值(整数为0,字符为u \ 0000等。)
  2. 使用显式初始化值
  3. 初始化变量
  4. 使用静态块初始化
  5. 构造函数被称为

答案 6 :(得分:0)

构造函数是实际创建对象的东西。通过执行new MyClass()(或其参数化版本)创建对象时调用它。

答案 7 :(得分:0)

鉴于这些选项,1。在创建对象之前。

构造函数完成后,已创建对象。

答案 8 :(得分:0)

  

创建对象后

使用新的运算符(例如Student s = new Student();)创建对象之后; 首先创建Student对象,然后调用构造函数初始化该对象的变量

我们可以使用以下代码证明在创建对象后调用了构造函数

code to prove constructor is called after object creation

enter image description here

这里我们使用实例块。并且实例块在构造函数之前执行

所以我要在三个地方打印哈希码

  1. 内部实例块
  2. 内部构造函数
  3. 在主要方法里面

这三个哈希码都相等,这意味着在执行构造函数之前先创建对象

因为具有哈希码,所以必须有一个对象。并且如果在实例块和构造函数中打印的哈希码相等。这意味着必须在构造函数执行之前创建对象

答案 9 :(得分:-1)

每当我们使用' new'创建对象时运算符然后第一个任务由new执行,即它为堆中的对象分配内存,指向堆栈中的引用变量并设置对象字段的初始值。然后它调用构造函数并传递'这个'作为根据您的要求初始化它的对象......

因此,在创建对象之后总是调用构造函数....

注意:当你输入构造函数时,这个'关键字正在运行意味着您的对象已创建。

相关问题