static块是在main()执行之前初始化的,而且只有一次初始化,所以第一个没有显示,你的main()什么都没做

解决方案 »

  1.   

    包含
    static 

    System.out.println("Hello, World"); 

    则在类载入的时候执行,然后才调用main/构造/静态
    ----------------------


    System.out.println("Hello, World"); 
    }感觉上是一个函数,可是没有函数名字,不知道如何调用既然没有调用,自然不会执行 
      

  2.   

    我记得think in java 上有比较详细的说明,
    自己看看书吧
      

  3.   

    同意AIHUA(牙神三空杀) 关于静态块的说明。其实那个无名的函数就是其默认的构造函数。
    例如你可以这样写:
    Vector v = new Vector(){
    {
       addElement("a");
    }
    }
    你一new那个代码就执行了。
      

  4.   

    我个人认为是装载时机不同,正如AIHUA(牙神三空杀)所说
      

  5.   

    AIHUA(牙神三空杀) 说的关于静态的方法和块是正确的,
    而下面的那个解释则不完全。JVM在载入类的时候按照定义的循序依次初始化各个静态属性,
    如果没有调用构造函数。只调用了静态的属性,那些非静态的属性是不会初始化的。如果调用了构造函数,那么JVM就依次开始初始化非静态的属性。而

    System.out.println("Hello, World"); 
    }
    是属于非静态属性那么按照上面的说法,在构造函数执行前,就已经初始化了。
    如果上面的如果楼主只运行了main函数,那么Hello, World就不会出现如果楼主在main函数中添加  panfeng test = new panfeng();
    那么将出现Hello, World;
      

  6.   

    static{}在main之前调用,所以有东西
    {}之间的部分,编译器是当作无参的构造函数处理的,但是注意一下情况:
    public class A 


    System.out.println("Hello, World"); 

    public A(){System.out.println("go");}
    {
    System.out.println("after");
    }
    public static void main(String[] args) 

    new A();


    结果是Hello,world
    after
    go
    明白了吧,这些代码无论放哪,都是相当于加到构造函数的最前面