gpt4 book ai didi

java - 对象创建过程中究竟发生了什么? ( java )

转载 作者:行者123 更新时间:2023-12-02 09:06:50 24 4
gpt4 key购买 nike

我一直在学习 Head First Java,目前正在学习构造函数章节。他们解释说,对象是通过在 new 关键字之后调用构造函数来创建的。

我的问题:创建新对象时运行的到底是什么?

我们以以下示例代码为例:

public class Const {

// instance variables
int number;
String name;


// Constructors
public Const() {
//implicit super
System.out.println("no-arg constructor");
}
public Const(int i, String s) {
//implicit super()
number = i;
name = s;
System.out.println("two-arg constructor");
}


// test method
public void doSomething() {
System.out.println("I'm a test");
}


// Main
public static void main(String[] args) {

Const c1 = new Const();
Const c2 = new Const(5, "Jerry");
}
}

现在,我认为创建 c1 时幕后发生的事情是:

  1. public Const() 被调用
  2. super() 被调用
  3. Const 的 Object 部分已构建。
  4. public Const() 回到堆栈顶部。
  5. 现在我的麻烦来了。对象的实例变量和方法是何时以及如何创建的(添加了哪些隐式代码)?

最佳答案

What exactly happens during object creation? (Java)

  • 构造函数被调用,它将调用父类的super方法(默认为Object类,因此新类将有权访问Object类的所有成员)
  • 内存分配
  • 字段已初始化(通过分配的值或如果未给出则采用默认值)
  • 构造函数的其余代码块将被执行

所以这里唯一的区别是:

Const c1 = new Const();

这里的number将由int默认值初始化,即0,name将由null初始化,这是String的默认值

Const c2 = new Const(5, "Jerry");

这里分别是 5 和 Jerry

使用new Const(),构造函数将被调用,类将被加载到主内存。

public Const() {
//implicit super
super()
}

java中的super关键字是一个引用变量,用于引用父类对象,默认是Object类。关键字“super”随着继承的概念而出现。

现在它可以访问 Object 类的所有成员,即 toString、equals :

您可以访问

c1.toString() or c1.equals(obj)

When and how exactly are the instance variables and methods for the object created (what implicit code is added)?

我想现在您已经了解了实例变量是如何创建的,以及根据类型为其分配默认值。

如果仍然不清楚,请尝试了解内部拱门,这可能会有所帮助:

JVM Arch

关于java - 对象创建过程中究竟发生了什么? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59755973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com