我最近在学习Java时遇到了一种编程语言,这种语言对于编写GUI代码并不麻烦(要求一个简单的方法来创建一个窗口并添加界面元素?),以及关于动态和静态编程如何在Java中混合,我有点好奇。 Java要求我将我的主类/入口点声明为:
public static void main(String[] args)...
在main中,我可以使用以下内容声明实例:
JFrame frame = new JFrame();
为什么这样,而frame = new JFrame();
在Java中完全有效?
特别是,当我精神上“解析”第一个时,我把它读作“框架,JFrame的一个实例,是JFrame的新实例”。对我来说,这似乎有点多余。后者,我读作“框架是JFrame的新实例”似乎更合理。
继续前进,我经常在类的顶部附近定义它经常使用的变量,特别是常量或持久显示对象,所以当我创建一个简单的类时,我通常会声明像public JFrame frame
这样的东西
正确实例化中的冗余,JFrame frame = new JFrame()
我可以删除这些声明而没有明显问题吗?
public class Display {
//The line below can be deleted with no apparent difference
public JFrame frame;
public static void main(String[] args) {
/* Why do I need to declare the type of a variable I have
* already declared above? */
JFrame frame = new JFrame();
frame.setSize(800, 600);
frame.setVisible(true);
}
}
在我删除该声明的情况下,我是否正确假设该帧成为主方法的子节点?在这种情况下,将它声明为顶部会使它成为显示的孩子吗?
总的来说,我想通过静态类来解释实例化。我真的希望我不是在问一个愚蠢的问题,但我发现在线“教程”通常采用描述代码功能的演练形式,但不是为什么以这种方式使用它;基本上,我在其他地方找不到答案,我知道你们有很多知识。我真的很感激有一个深思熟虑的回答,如果可能的话,我会在每个例子中解释如何与声明的'框架'互动。
我也很高兴解释为什么frame = new JFrame无效,即使我将public JFrame frame
声明为最高。
非常感谢您阅读本文并花时间回复^ _ ^
答案 0 :(得分:4)
之间存在非常显着的差异:
JFrame frame = new JFrame();
和
frame = new JFrame();
第一个版本声明了一个新的 local 变量(在您给出的上下文中)并为其赋值。该局部变量与您在Display
类中声明的实例变量完全分开。
后一个片段为现有变量分配了一个新值 - 除非在这种情况下它不起作用,因为你有一个实例变量但没有{{{ 1}}。
如果您将Display
变量声明为frame
而不是实例变量,则可以在static
方法中指定该变量:
main
或者您可以创建public class Display {
public static JFrame frame;
public static void main(String[] args) {
frame = new JFrame();
frame.setSize(800, 600);
frame.setVisible(true);
}
}
的新实例,并为其中的实例变量赋值:
Display
然而:
public class Display {
public JFrame frame;
public static void main(String[] args) {
Display display = new Display();
display.frame = new JFrame();
display.frame.setSize(800, 600);
display.frame.setVisible(true);
}
}
内使用实例/静态变量答案 1 :(得分:1)
//The line below can be deleted with no apparent difference
public JFrame frame;
是的,因为它是一个未使用的变量。
您永远不会在代码中使用实例字段frame
。
相反,你有
public static void main(String[] args) {
/* Why do I need to declare the type of a variable I have
* already declared above? */
JFrame frame = new JFrame();
声明一个具有相同名称和类型的新的,完全不相关的局部变量。