gpt4 book ai didi

java - Java 中的对象创建流程是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 21:32:45 26 4
gpt4 key购买 nike

这里是 Java 和 OOP 的新手。

我试图了解何时可以使用对象的成员。具体来说,为什么在类中调用实例变量时不能将实例变量传递给构造函数?示例代码如下:

public class Point {

public String name;

{
name = "Henry";
}

public Point()
{
this(this.name); // cannot reference this before supertype constructor has been called
}

public Point(String name)
{
this.name = name;
}

}

以前曾有人问过类似的问题,但我不知道如何向 Google 询问我在这里解释的内容。我知道我无法在 this(this.name) 调用中引用 this.name,因为尚未创建对象引用,但是 Java 到底是如何调用的构造函数?

构造函数唯一执行的时间是使用 new Point() 创建对象时,此时对象引用将可用,并且编译器不会有任何可提示的。如果可以将 this.name 分配给一个变量,然后将其传递给 this(variable),那么它就可以工作,不是吗?有什么巨大的区别呢?我完全误解了这里的一些内容。

这就是我的可视化方式,这显然是不正确的:

Point myPoint = new Point();

myPoint.name 现在等于 "Henry"

Point() 构造函数中,执行 this(this.name)//应该是“Henry”

最佳答案

我不知道这是否完全回答了您的问题,因为它有点令人困惑,但我会尽力而为:

为了创建一个新对象,您可以使用new操作数,例如Point point = new Point();。您的对象可以/应该包含属性,并且您在创建 public String name; 时正确启动了它(尽管您应该对此进行搜索,因为它们不应该是公共(public)的)。如果必须为属性分配默认值,则必须在其声明后立即执行此操作(例如 public String name = "Henry";。再一次,您可能想要搜索有关 java 常量的信息来解决这个问题。

此代码可以帮助您了解(我认为)您想要做什么:

public class Point {

public String name = "Henry";

public Point() {

}

public Point(String name) {
this.name = name; //changes current value (Henry) to the one sent as an argument.
}


public static void main(String[] args) {
Point pointA = new Point();
Point pointB = new Point("Other name");

System.out.println(pointA.name);
System.out.println(pointB.name);
}
}

在此代码中,您可以找到一个空对象的实例 (new Point();) 和一个名为“Other name”的实例 (new Point("Other name") ;)。

如果运行它,您可以看到两个实例化之间的差异。

希望这对您有帮助!

编辑:附:您可能还想搜索 getter/setter。

关于java - Java 中的对象创建流程是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37304802/

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