gpt4 book ai didi

java - 成员使用 "this"初始化

转载 作者:行者123 更新时间:2023-12-01 23:57:53 25 4
gpt4 key购买 nike

这是我的问题

class A{
private B b = new B(this); // line 2

A(){}
}

这只是一个前任。代码并且工作正常。但我对 this 用于当前引用(A 的实例)有疑问。类初始化发生在获取类实例之前。那么我们如何将 this 放在第 2 行中。我问实例化是否在初始化之前发生?

最佳答案

你提出了一个有趣的观点。这是一个人为的指导示例,演示了使用您的示例时可能发生的运行时问题。

class A {
private boolean isInitialized = false;
private final B b = new B(this);
public A() {
initialize();
}
private void initialize() {
isInitialized = true;
}
public boolean isInitialize() {
return isInitialized;
}
public B getB() {
return b;
}
}

class B {
private boolean isInitialized = false;
final private A a;
public B(final A a) {
this.a = a;
initialize();
System.out.println("inB: a.isInitialize()=" + a.isInitialize());
}
private void initialize() {
isInitialized = true;
}
public boolean isInitialize() {
return isInitialized;
}
}

public static void main(final String[] args) {
final A a = new A();
System.out.println("inMain: a.isInitialize()=" + a.isInitialize());
System.out.println("inMain:a.getB().isInitialize()=" + a.getB().isInitialize());
}

输出:

inB:          a.isInitialize()=false
inMain: a.isInitialize()=true
inMain:a.getB().isInitialize()=true

在类 B 中使用对类 A 的传递引用会带来使用未完全初始化的对象的真正风险。

小心。

关于java - 成员使用 "this"初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313429/

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