本人新手看到书上在讲static时给出了如下程序
public class Hello
{
   static{
         System.out.println("hello world");
  }
}
没有main函数,用javac编译后再用java命令运行可以显示hello world
虽然有main is not defined 的提示但是可在println后面加System.exit(0);以避免
看了书上的解释有些不太清楚,请各位高手解释下为啥这个没有main函数仍然可以运行,而且还有显示???
详细点

解决方案 »

  1.   

    static代码块在类加载的时候就开始执行了
    故这里没main函数也可以输出 hello world
      

  2.   

    那我如果加了main函数之后static代码块中的东西会先于main函数中的东西显示吗???
      

  3.   

    因为JVM的运行实际上是等同于以下代码
    Class clz = Class.forName(clzName);
    Method m = clz.getMethod("main", new Class[]{new String[0].getClass()});
    m.invoke(null, new Object[]{args});这样在第一行的时候,是成功通过并加载了static代码段。报main is not defined 只是第二个语句的错误。