-1

我最近一直在学习 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);
        }
     }

在我删除该声明的情况下,我是否正确地假设该框架成为主要方法的子方法?在这种情况下,将其声明为顶部会使其成为 Display 的子项?

总的来说,我想通过静态类来解释实例化。我真的希望我不是在问一个愚蠢的问题,但我发现在线“教程”通常采用演练的形式,描述代码的作用,而不是为什么要这样使用;基本上,我在其他地方找不到答案,我知道你们有很多知识。我真的很感激一个深思熟虑的回应,如果可能的话,在我的每个例子中解释如何与声明的“框架”进行交互。

我也会很高兴解释为什么 frame = new JFrame 是无效的,即使我public JFrame frame在上面声明。

非常感谢您阅读本文并花时间回复^_^

4

2 回答 2

4

有一个非常显着的区别:

JFrame frame = new JFrame();

frame = new JFrame();

第一个版本声明了一个新的局部变量(在您给出的上下文中)并为其赋值。Display该局部变量与您在类中声明的实例变量完全分开。

后一个片段为现有变量分配一个新值——除非在这种情况下它不起作用,因为你有一个实例变量但没有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);
    }
 }

然而:

  • 没有迹象表明您将在其中使用实例/静态Display变量
  • 强烈建议您始终将您的字段设为私有
于 2013-09-17T06:12:45.940 回答
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();

它声明了一个新的、完全不相关的、同名同类型的局部变量。

于 2013-09-17T06:13:36.480 回答