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