{}中的表示一个过程,new 的时候就调用
很多情况下有
static{
}
这样,当你load一个类的时候,就运行了,如Class.forName();就是这样

解决方案 »

  1.   

    x = new A();   //***
    这句话是个语句,是不能出现在那里的。当然编译器会报错
      

  2.   

    加{ }叫instance initialization,就好像给一个int类型的field赋值
    不过前者可以带statement,后者只能是expression
      

  3.   

    回复人: kypfos(大学里没有回忆) ( ) 信誉:99  2003-12-23 12:28:00  得分:0 
     
     
      申明部分不能有执行语句。
      
     
    所有可执行语句都必须放到方法或是程序块(就是用大括号装起来)中
      

  4.   

    以前都没有注意过这个问题还是 Hodex(小何才露尖尖角) 理解的深刻!
      

  5.   

    其实类的initializer也不一定在类被载入是就调用,如果你定制过ClassLoader,就会知道在载入类时由个参数,来控制是不是要调用initializer,如果在类的载入阶段没有调用initializer,那么在类第一次被实例化时会隐含调用initializer
      

  6.   

    多谢赐教
    楼上有说:申明部分不能有执行语句。
    也不是说:
    x = new A();  
    是执行语句了  //  不知道理解得对不对不知道申明部分的:
    A x = new A();属不属于执行语句?
      

  7.   

    A x = new A();不属于
      

  8.   

    小弟只是想知道为什么
    x = new A();
    属于而在x前面加了一个A变成
    A x = new A();
    就不属于了呢?
    它们之间有什么本质的区别吗?
      

  9.   

    A x = new A();
    是定义并初始化,系统就是这么规定的,不能分开来做。
    如果用 A x;
    那 x = new A(); 就必须放在方法里,或者用块初始化,就是像你上面做的
      A x;
      {
        x = new A();    
      }
    一样,加一对大括号就可以了。
    这个问题《Core Java》里有论述。好像是在继承那部分,看一下你就明白了。
      

  10.   

    A x;
    或是A x = null;
    或是A x = new A();
    这些都是声明(Statement)而x = new A();
    则是表达式(Expression)