gpt4 book ai didi

Java:变量 "this"什么时候初始化的?

转载 作者:行者123 更新时间:2023-12-01 07:10:28 29 4
gpt4 key购买 nike

public class MainMDI extends javax.swing.JFrame {

private static MainMDI thiz;

public MainMDI() {
initComponents();
thiz = this;
}
}

我正在 swing 创建一个 MDI 应用程序。 MainMDI 类是应用程序的主类,因此 main 方法位于该类中。上面的代码创建了一个名为 thiz 的静态变量,当应用程序运行时,该变量指向 MainMDI 类的实例。

我计划使用变量 thiz 从 main 方法中访问 MainMDI 类的非静态(实例)成员。(我无法从 main 方法中访问非静态成员,因为 main 方法是静态的我的应用程序中 MainMDI 类的成员)。

public class MainMDI extends javax.swing.JFrame {

private static MainMDI thiz = this;

public MainMDI() {
initComponents();
}
}

但是当我尝试像上面的代码一样初始化变量 thiz 时,编译器说非静态变量 this 不能从静态上下文中引用。但我并不是在静态上下文中提到这一点,不是吗?这是因为变量this是非静态的,当静态变量this初始化时尚未初始化吗?

此外,如果我没有将 MainMDI 类设置为主类并创建另一个包含 main 方法的类并将该类设置为主类,这会是更好的编程实践吗?

最佳答案

But when I attempt to initialize variable thiz as in the above code, compiler says non-static variable this cannot be referenced from a static context. But I'm not referring to this in a static context here am I?

是的,你是。静态类变量在加载类时(而不是在创建对象实例时)进行初始化。在该上下文中没有 this 。代码:

private static javax.swing.JFrame thiz = this; 

根本行不通。尽管您的主张与此相反,您确实想要一个单例。否则,给定 MainMDI 对象的 N 个可能的对象实例,您希望从静态上下文访问哪一个?您应该考虑重构您的代码,而不是尝试强制使用 Java 语言语义。

关于Java:变量 "this"什么时候初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15355478/

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