Eve*_*one 2 java entry-point static-initializer
java中程序的入口点通常是这样的
// MyMain.java
public class MyMain{
//whatever
public static void main(String args[]){
System.out.println("balderdash");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于main中只有一个SOP,因此上述类可能是这样的
// MyMain.java
public class MyMain{
//whatever
static {
System.out.println("balderdash");
}
}
使用main(...)的一个明显优点是参数可以传递给程序.另一个(我在这里猜测)可能与垃圾收集器有关,不同地处理在静态块中创建的对象.
使用语言定义的入口点还有其他好处 - public static void main(String args [])而不是使用静态初始化程序.
ps上述代码段仅供参考,可能无法编译
编辑:这是一个问题的例子:
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!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Starting new thread...
Thread started. Sleeping
Calling someStaticMethod
Finished sleeping
In someStaticMethod
someStaticMethod returned
In main. Sleeping again.
Run Code Online (Sandbox Code Playgroud)
请注意someStaticMethod来自新线程的调用必须等到静态初始化程序在运行之前完成.
您可以main()根据需要多次从代码中的任何其他位置调用其他对象.静态初始化程序只会运行一次.此外,您可以将命令行中的参数传递给main().
main()在我的书中有两个大的优点.