public class Sub extends Super{
   static{
      System.out.println("static");
   }
   {
      System.out.println("实例化器");  //这一段就是,在构造方法之后。
   }   public static void main(String[] args)  {
        new Sub();
   }
   }

解决方案 »

  1.   


    public class Sub {
    static {
    System.out.println("static");
    } {
    System.out.println("实例化器"); // 这一段就是,在构造方法之后。
    } static {
    System.out.println("static2");
    } public Sub() {
    System.out.println("sub");
    }
    public static void main(String[] args) {
    new Sub();
    }}static
    static2
    实例化器
    sub
    没发觉在构造方法之后,到是感觉在静态方法之后
      

  2.   

    那一段应该不会被执行到,除非他在一个static的语句块内部,要不应该是不会被执行
      

  3.   

    那是初始化块,在调用构造方法时调用。
    在你new XXX()的时候,它就执行了。
      

  4.   

      {
          System.out.println("实例化器");  //这一段就是,在构造方法之后。
       }叫做非静态初始化,它将会在类被new过一次的时候,调用(只调用1次)
      static {
            System.out.println("static");
        }
    叫做静态初始化,它将会在类被装载的时候调用(也只调用一次)
      

  5.   


    你在main里再加一个new Sub();  会发现每次new都会调用的
      

  6.   


    你在main里加个new Sub() 再看“叫做非静态初始化,它将会在类被new过一次的时候,调用(只调用1次)”
      

  7.   

    大哥们,static{} 静态块是类加载时,只调用一次。
    而{   }实例化块是调用构造函数之前,调用一次。每次new都会调用。绝对正确的理解
      

  8.   

    这么基础的问题都搞不清楚学什么java?!
    Java_gannbare说的没错
      

  9.   


    static{
          System.out.println("static");
       }这点thinking in java上有说过啊,从未创建某个类的任何对象,也可以调用其static方法或访问其static域
    也就是说static内部是静态方法,程序编译时就生成了,不需要new,一样会调用
      

  10.   

    看见过 而且还有段有趣的代码呢 
    package test;import static java.lang.System.*;
    import static java.util.Calendar.*;public class HelloWorld {
    static {
    out.println("Hello Word");
    System.exit(0);
    out.println(AM);
    }
    }class HelloWorld2 extends HelloWorld {
    static {
    out.println(AM);
    }
    }另一版本 HelloWorld..
      

  11.   

    恩 写错了...发错了 把那个out.println的都拿掉..
      

  12.   

    这不就是静态代码块么?
    静态代码块中的代码会在该类.class文件被ClassLoader加载时执行,只会执行一次,因此他肯定会在这个类被实例化之前就执行。这个特性决定他适合某些方面的需求,比如Class.forName(db的driver类路径)
      

  13.   

    static{}这个是静态初始化
    {}这个是非静态初始化
      静态初始化只执行一次运行于构造函数前面
      

  14.   

    静态块、成员和方法,以及静态内部类是在类加载的时候初始化的,并不是 new 的时候初始化的,在 new 之前已经做了类加载处理了。使用 Class.forName() 就可以加载一个,这也就是 JDBC 使用这句来加载驱动程序的原因。因为 JDBC 规范规定 JDBC 驱动实现类必须在静态块中把自己注册给驱动管理器,也就是 DriverManager
      

  15.   

    http://hi.baidu.com/gabe2008/blog/item/fde4a5065c4b4ec67a8947e9.html
    此处有总结。关于“类和实例的代码初始化器”。