public class JRun1 {
public JRun1() {
System.out.println(" 构造函数");
}
static
{
System.out.println("static{}");}
{
System.out.println("{}");//类定义还有这么一种东西?这个算什么?
}public static void main(String[] args) {
System.out.println("main()");
new JRun1();
}
}执行结果:
static{}
main()
{}
 构造函数

解决方案 »

  1.   

    我第一次看到这种写法,以前没有见过,感觉这样岂不是有点破坏java的纯面向对象思想。
      

  2.   

    没有错误,静态变量也就是类变量有static初始化块,对应的类成员变量也有,区别是
    :
    (1)static{
             }
    (2){
       }
      

  3.   

    那为什么main()会插入到static{}和{}中间呢?
      

  4.   

    static中的语句会在类加载的时候得到执行。而"{}"中的语句则当作成员变量在类在实例化的时候得到执行。在实例化时会先实例化类的成员变量。因此,不管把“{}”中的语句放在什么地方,执行结果都是一样的。此外,
    int a = 3;
    {System.out.println("{}");}
    int b = 4;
    Debug一下可以就可以知道,它们是按着顺序执行的。
      

  5.   

    这个类叫做匿名类,匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。
      

  6.   

    我觉得不是什么匿名类吧.
    同意yf040230427(枫叶), dbyang()所说
      

  7.   

    static
    {
    System.out.println("static{}");}
    这个根本就不是匿名类,这叫静态程序块,目的是让JVM加载一个类时,先进行一些必须操作,就是说JVM一加载这个类,静态程序块中的代码肯定被执行。它与静态方法的区别是,如果public static doSomething(){},只要这个方法没别的程序调用,它是不被执行的.
      

  8.   

    static{} 是“Static Initializers”
    {} 是“Instance Initializers”
    这些在 Java Language Specification 里都有说明。----An instance initializer declared in a class is executed when an instance of the class is created.Any static initializers declared in a class are executed when the class is initialized and, together with any field initializers for class variables, may be used to initialize the class variables of the class.
      

  9.   

    看过这样的。
    public class JRun1 {
       static
       {
         System.out.println("Hello");
         System.exit(0);
       }
    }
    运行结果:
    Hello静态代码块是在JVM加载类的时候运行的。一般用来做初始化!
      

  10.   

    同意terry_yip(搞了几年开发,现在才来恶补基础,请别见笑!) 
    的观点
      

  11.   

    static{
    ...
    }
    是用来做显示的STATIC变量初始化的,只初始化一次,在类被第一次装载的时候执行。
      

  12.   

    我还是没弄懂为什么会这样?main()会插入到static{}和{}中间,构造函数在最后?按照上面的说法,static{}和{}应该是连在一起的,然后再是main()啊,最后才是构造函数啊
      

  13.   

    为什么main()一定要最后执行呢?不要忘记main()是静态方法啊,先执行静态构造块,再执行静态方法,这个是很自然的顺序,不要让习惯的观念先入为主啊