java中程序的入口点通常是这样的
// MyMain.java
public class MyMain{
//whatever
public static void main(String args[]){
System.out.println("balderdash");
}
}
但是,由于main中只有一个SOP,所以上面的类可能是这样的
// MyMain.java
public class MyMain{
//whatever
static {
System.out.println("balderdash");
}
}
使用main(...)的一个明显优势是参数可以传递给程序。 另一个(我在这里猜测)可能与垃圾收集器有关,不同地处理在静态块中创建的对象。
使用语言定义的入口点还有其他好处 - public static void main(String args [])而不是使用静态初始化器。
P.S。上述代码段仅供参考,可能无法编译
答案 0 :(得分:6)
class SampleTask implements Runnable
{
public void run()
{
System.out.println("Calling someStaticMethod");
Test.someStaticMethod();
System.out.println("someStaticMethod returned");
}
}
public class Test
{
static
{
System.out.println("Starting new thread...");
new Thread(new SampleTask()).start();
System.out.println("Thread started. Sleeping");
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
System.out.println("Interrupted!");
}
System.out.println("Finished sleeping");
}
public static void someStaticMethod()
{
System.out.println("In someStaticMethod");
}
public static void main(String[] args)
{
System.out.println("In main. Sleeping again.");
try
{
Thread.sleep(5000);
}
catch (InterruptedException e)
{
System.out.println("Interrupted!");
}
}
}
输出:
Starting new thread...
Thread started. Sleeping
Calling someStaticMethod
Finished sleeping
In someStaticMethod
someStaticMethod returned
In main. Sleeping again.
注意新线程对someStaticMethod
的调用必须等到静态初始化程序在运行之前完成。
答案 1 :(得分:5)
您可以根据需要多次从代码中的任何其他位置为其他对象调用main()
。静态初始化程序只会运行一次。此外,您可以将命令行中的参数传递到main()
。
我书中main()
的两大优点。
答案 2 :(得分:2)
使用main()
更好的主要原因是您可以在应用程序中使用几种主要方法(在不同的类中)。如果加载一个类,main()
不会自动执行,而static
代码块在第一次加载类时总是执行一次,并且无法阻止它。
答案 3 :(得分:2)
好的,我承认我没有尝试过静态初始化类,但不会输入
java StaticInitializedClass
命令行上的打印出来
Exception in thread "main" java.lang.NoSuchMethodError: main
因为它没有main(String[])
方法?
答案 4 :(得分:1)
我们不要忘记可维护性。当其他人去改变你的代码时,他们总是会寻找一个main()方法来启动程序。除非有某些原因你无法绕过(而我猜不会),那么我只会使用main方法。
答案 5 :(得分:0)
如果您没有任何入口点,则无法运行任何操作。如果您有许多入口点(许多主要方法),启动应用程序控制的用户将通过命令行运行 另一方面,在加载类时执行静态初始化块。控制加载哪个类以及类加载(以及执行其静态初始化块)的顺序更难控制。这足以让不对静态初始化块施加太多逻辑。你创造了一些难以阅读和理解的东西,并且在奖励中你会收到更难以使用的东西。