【发布时间】:2013-03-12 07:22:37
【问题描述】:
public class MainMDI extends javax.swing.JFrame {
private static MainMDI thiz;
public MainMDI() {
initComponents();
thiz = this;
}
}
我正在摇摆中创建一个 MDI 应用程序。 MainMDI 类是应用程序的主类,因此主方法位于该类中。上面的代码创建了一个名为 thiz 的静态变量,它在应用程序运行时指向 MainMDI 类的实例。
我打算使用变量 thiz 从主方法中访问 MainMDI 类的非静态(实例)成员。(我无法从主方法中访问非静态成员,因为主方法是静态的我的应用程序中 MainMDI 类的成员)。
public class MainMDI extends javax.swing.JFrame {
private static MainMDI thiz = this;
public MainMDI() {
initComponents();
}
}
但是当我尝试在上面的代码中初始化变量 thiz 时,编译器说非静态变量 this 不能从静态上下文中引用。但我不是在静态上下文中指代这个,是吗?这是因为变量 this 是非静态的,在初始化静态变量 this 时还没有初始化?
另外,如果我没有将 MainMDI 类设置为主类并创建另一个具有 main 方法的类并将该类设置为主类,那会不会是一种更好的编程习惯?
【问题讨论】:
-
看起来你想要一个单身人士。谷歌
-
@Prashan 通过提供一个引用类的(又名 one)实例的(又名 one)静态变量,您可以有效地限制数量您的类的可访问实例到 one (至少在您认为必须通过静态方法访问的上下文中)。拥有多个实例并仅通过静态 thiz 使最后一个可用是一种不同的解决方法,因此每个人都隐含地排除了此选项。因此,我们都认为你真的想要一个单例方法。如果你一直坚持回答no!,那么你必须描述你的场景。
-
@Prashan 为什么不保留对对象的引用?我还没有清楚地了解您的软件架构,但我认为这不是您在应用程序中需要的唯一参考。在这种情况下,我会使用“环境”对象注册该对象,该对象在我需要的任何地方都可用。它甚至可以是静态的,因为可以肯定我的应用程序中只有一个环境。尽管如此,如果我发现我需要更多 MainMDI 对象引用,代码更改将仅限于环境类和我需要 MainMDI 的少数地方。
-
@Prashan 和 JInternalFrame.getParent() 不会让您分别保留对父
JFrame的引用吗? -
@Prashan 我指的不是main,真的,而是当您需要访问
MainMDI对象时代码中的位置。一定有一个原因你为什么要访问它,这样你就会有一些可用的上下文,不是吗?我在想上下文可能是一个JInternalFrame对象。 -- 不管怎样,决定权在你,我们都已经向你指出了一些应该做到的方法,所以享受吧,我希望你成功。
标签: java constructor this static-members