为什么类可以在静态类中实例化,例如 main



我最近一直在学习Java,寻找一种编程语言,这种语言对GUI进行编码并不令人讨厌(要求一种简单的方法来制作窗口和添加界面元素是不是太过分了?),我对Java中的动态和静态编程如何混合感到有些好奇。Java 要求我将我的主类/入口点声明为:

public static void main(String[] args)...

在 main 中,我可以声明具有以下内容的实例:

JFrame frame = new JFrame();

为什么这在 Java 中frame = new JFrame();完全有效?

特别是,当我在脑海中"解析"第一个时,我把它读成,"框架,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);
        }
     }

如果我在顶部删除该声明,我假设框架成为 main 方法的子级是否正确?在这种情况下,在上面声明它会使它成为显示的子项?

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

我也很乐意解释为什么 frame = new JFrame 是无效的,即使我声明public JFrame frame顶部。

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

两者之间存在非常显着的区别:

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中使用实例/静态变量
  • 强烈建议您始终将您的领域设为私有
//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();

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

相关内容

  • 没有找到相关文章

最新更新