Java 关于静态上下文的最佳实践

Java 关于静态上下文的最佳实践,java,static,non-static,Java,Static,Non Static,在编写独立java应用程序时,我看到很多初学者在静态上下文中编写代码。 我曾经通过在main中创建一个类的实例并从构造函数开始工作来解决这个问题 我已经添加了一些非常简单的独立程序的示例,并且想知道是否有“离开”静态上下文的最佳实践 我还想知道一个独立的java程序是否应该在静态上下文中或者特别是在main方法中做一些事情,除了作为每个独立java程序的入口点之外,它的功能是什么 欢迎任何阅读材料 import javax.swing.JFrame; import javax.swing.JLa

在编写独立java应用程序时,我看到很多初学者在静态上下文中编写代码。 我曾经通过在main中创建一个类的实例并从构造函数开始工作来解决这个问题

我已经添加了一些非常简单的独立程序的示例,并且想知道是否有“离开”静态上下文的最佳实践

我还想知道一个独立的java程序是否应该在静态上下文中或者特别是在main方法中做一些事情,除了作为每个独立java程序的入口点之外,它的功能是什么

欢迎任何阅读材料

import javax.swing.JFrame;
import javax.swing.JLabel;

public class ExampleStatic
{
    JLabel label;

    public static void main(String[] args)
    {
        //Option 1 - Work from static context:
        JFrame frame = new JFrame();
        frame.setBounds(10,10,100,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel staticlabel = new JLabel("static");
        frame.add(staticlabel);

        frame.setVisible(true);

        //Option 2 - Create instance, call initialisation function
        ExampleStatic e = new ExampleStatic();
        e.initialise();

        //Option 3 - Create instance, handle initialisation in constructor
        new ExampleStatic(true);
    }

    public ExampleStatic(){}

    public ExampleStatic(boolean init)
    {
        JFrame frame = new JFrame();
        frame.setBounds(10,10,100,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        label = new JLabel("constructor");
        frame.add(label);

        frame.setVisible(true);
    }

    public void initialise()
    {
        JFrame frame = new JFrame();
        frame.setBounds(10,10,100,100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        label = new JLabel("init function");
        frame.add(label);

        frame.setVisible(true);
    }
}

选项2和选项3都很好,因为它们都提供了松耦合,如果您想在其他类的其他地方使用您的实例,您可以轻松地使用它。但是,如果您将在Main方法中编写所有内容,那么您将失去作用域及其可重用性。

JVM需要
Main
是静态的,然后您就可以自由地执行您想要的操作了。我将调用一个非静态的“secondmain”,它将处理初始化,然后处理不同方法(或类)中的任何进一步处理


我会避免把东西放在构造函数中,除非你真的觉得它是适合它们的地方。

选项2和选项3都很好。我知道这一点,但我想知道在静态上下文中是否也有你应该做的事情,而不是在构造函数或实例对象函数中。你是说静态main除了作为入口点之外没有任何函数,最好的做法是尽快离开它?如果你不想离开它,你不必离开它。它是静态的,是因为JVM,而不是程序员。