Pra*_*anD 0 java constructor this static-members
public class MainMDI extends javax.swing.JFrame {
private static MainMDI thiz;
public MainMDI() {
initComponents();
thiz = this;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试初始化变量thiz时,如上面的代码,编译器说非静态变量,这不能从静态上下文引用.但我不是在静态环境中提到这个,不是吗?这是因为变量this(非静态的)在静态变量初始化时尚未初始化吗?
另外,如果我没有将类MainMDI设置为主类并使用main方法创建另一个类并将该类设置为主类,那么它是一个更好的编程实践吗?
但是当我尝试初始化变量thiz时,如上面的代码,编译器说非静态变量,这不能从静态上下文引用.但我不是在静态环境中提到这个,不是吗?
是的,你是.加载类时(而不是在创建对象实例时)初始化静态类变量.this在这方面没有.代码:
private static javax.swing.JFrame thiz = this;
Run Code Online (Sandbox Code Playgroud)
根本就行不通.尽管你的断言恰恰相反,但你确实想要一个单身人士.否则,给定对象的N个可能的对象实例,您MainMDI希望从静态上下文访问哪一个?您应该考虑重构代码,而不是试图强调Java语言语义.
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |