为什么`main`在这里被叫两次?

lov*_*ava 2 java static program-entry-point

这是我的代码:

public class Test
{
   static 
   {
      main(null);
   }
   public static void main(String [] args)
   {
      System.out.println("done");
   }
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

done 
done
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这个原因吗?

Nik*_* B. 6

原因是main被叫两次:

  1. 显式地,一旦加载类,就从静态初始化块开始.
  2. 一旦程序开始,隐含地,在程序进入时.

如何解决这个问题?要么不要显式调用它,要么重命名它,以便不会自动调用它.