public class abcd
{
  abcd()
  {
    this(12);
    System.out.println("no parameter construct");
  }
  
  abcd(int x)
  {
    System.out.println("one parameter construct");
  }
  
  { 
    System.out.println("init");
  }
  static
  { 
    System.out.println("static init");
  }
  
  public static void main(String args[])
  {  
    new abcd(12);
    new abcd();
  }

--------------------------
为什么结果是这样的啊 ,谁能解释下,谢谢
static init
init
one parameter construct
init
one parameter construct
no parameter construct

解决方案 »

  1.   

    对象加载次序:1、静态代码块或者静态方法->2、非静态代码块或者非静态方法->3、对象的构造方法。 
    由于非静态语句块每个类都会有,所以每次new 的时候都会执行,而静态块是一个类拥有同一个,所以只输出一次。
      

  2.   

      { 
      System.out.println("init");
      }
    第一次见这种写法,貌似每次new一个对象都要执行一次。
    static静态块只执行一次。
      

  3.   

    {
    System.out.println("init");
    }
    普通代码块
      

  4.   

    是的,而且只有static是刚开始就执行,而且只执行一次