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

时间:2015-04-29 09:45:42

标签: java static non-static

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

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

我还想知道是否有一些独立的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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

JVM需要main是静态的,之后你可以自由地做你想做的事情。我会调用一个非静态的“第二主”来处理初始化,然后在不同的方法(或类)中进行任何进一步的处理。

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