gpt4 book ai didi

java - 嵌套类的初始化顺序

转载 作者:行者123 更新时间:2023-12-01 22:44:03 24 4
gpt4 key购买 nike

我有这段代码,编译器在我尝试创建 BtnAct 时返回 NullPointerException。我已经阅读了很多有关初始化的内容,但仍然没有遇到内部类的初始化顺序。有人可以帮忙吗?

public class BaseClass{
static Myclass myClass;
public static void main(){
myClass = new MyClass;
}
}
class MyClass{
NewClass newClass;
public MyClass(){
newClass = new NewClass();
}
class BtnActn extends AbstractAction {
BtnActn() {
super("Button");
}
@Override
public void actionPerformed(ActionEvent e) {
//blabla
}
}
}

class NewClass{
JButton button;
public NewClass(){
button = new JButton(BaseClass.myClass.new BtnActn()); //NullPointer.ex here
}
}

最佳答案

发生的情况是这样的:

  1. 基类尝试创建 MyClass 的实例。请注意,此时它还没有分配给 myClass
  2. MyClass 的新实例尝试创建 NewClass 的实例。请注意,此时它还没有分配给变量 newClass
  3. NewClass 的新实例尝试创建 JButton 的新实例。为此,它首先需要访问 BaseClass.myClass。不幸的是,对象 BaseClass.myClass 已经在内存中(当时正在初始化),但尚未分配给 BaseClass.myClass 变量。所以它会产生一个 NullPointerException。

因此,您需要将 Button 的初始化与 BaseClass 中 myClass 变量的初始化分开。

关于java - 嵌套类的初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605638/

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