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

时间:2015-03-18 04:08:03

标签: java static main

是什么让public static void main(String args[]) {}成为测试代码的惯例,而不仅仅是static {}

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

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

class Test {  
    static {
        System.out.println("testing");
    }
}

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

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

2 个答案:

答案 0 :(得分:6)

我说最重要的原因是不使用static {}这样的事情就是你几乎无法控制它的运行时间。 static {}阻止运行"当班级初始化时#34;这意味着至少有四个(注意西班牙宗教裁判所)为此目的的有害事情:

  • 不一定是因为该类是已加载
  • 另一方面,它只是因为你想要一个类的实例或引用来自其他类的静态字段而发生,这是你不想真正想要放宽代码的主要原因 - static {}块中的副作用。
  • 由于Jar文件位于类路径上这样简单的原因,也无法保证发生。 JVM可以随心所欲地运行static {}块,只要它是在来自其他代码的类的任何静态引用之前。 "之前"可能意味着"在VM启动"。
  • 没有VM实现有任何调用参数可以根据请求为您运行此类代码。

static {}块的目的是初始化静态类数据(当然可能以非常复杂的方式),并且从前面的几点你可以看出它为什么不是特别有用的别的什么。

答案 1 :(得分:2)

在java中,每个应用程序都需要一个main方法,它将成为应用程序的入口点。所需的主要方法具有如下签名:

public static void main(String[] args)

此方法与您建议的其他方法之间的区别(除了您的应用程序需要使用此签名作为入​​口点的主方法这一事实)之外,这是一个方法并采用“String [] args”参数。此参数是从控制台运行程序时参数的用途。

每个java应用程序都可以从控制台运行,因此每个应用程序都有一个标准的入口点方法是有意义的,它可以采用任何特殊的参数。

您的static {}块不一定是可以调用的方法或函数,因此它不能用作应用程序的入口点。它不需要参数,您无法控制何时运行其代码块。