为什么在使用static {}时使用main()?

use*_*391 2 java static program-entry-point

是什么使public static void main(String args[]) {}测试代码的惯例而不是简单static {}

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

它看似具有相同的功能,您可以实例化所有者类,使用其方法,另一个类,甚至发送输出:

class Test {  
    static {
        System.out.println("testing");
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有标准的理由不使用小型static {}运行平均测试?我可以安全地作为我的选择/偏好吗?

换句话说,我想找到一个案例,你把一个代码放在一个你不能(或不应该)放在另一个代码中的代码,它不会运行或给出意想不到的结果等等.

Dol*_*000 6

我会说不使用static {}这些东西的最突出的原因是你几乎无法控制它的运行时间.static {}块"在类初始化时"运行,这意味着至少有四个(注意西班牙宗教裁判所)为此目的的有害事情:

  • 它不一定只是因为类被加载而发生.
  • 另一方面,它发生的原因仅仅是因为你想要一个类的实例或引用来自其他类的静态字段,这就是为什么你真的不想让代码具有广泛的副作用的主要原因.在static {}街区.
  • 由于Jar文件位于类路径上这么简单的原因,也不能保证不会发生这种情况.JVM可以static {}随心所欲地运行块,只要它是在来自其他代码的类的任何静态引用之前."之前"可能意味着"在VM启动时".
  • 没有VM实现具有任何调用参数来根据请求为您运行此类代码.

static {}块的目的是初始化静态类数据(当然可能是非常复杂的方式),从前面的几点你可以看出为什么它对其他任何东西都不是特别有用.