class A { A() { System.out.println("A.A called");

}}
class B extends A { int i =f(); int j;
{ j = 37; System.out.println("initialization block executed"); }
B() { System.out.println("B.B called"); }
int f() { System.out.println("B.f called"); return 47; }}public class CtorDemo2 { public static void main(String args[]) { B bobj = new B(); }}
请问 子类中
{ j = 37; System.out.println("initialization block executed"); }
这2个括号是什么意思啊?为什么没有方法名啊?这是什么写法啊?为什么我把括号去掉会出错呢?

解决方案 »

  1.   

    是类的静态初始化写法.生成class的时候被执行.
      

  2.   

    那为什么把括号去掉的时候,会提示
    System.out.println("initialization block executed"); //非法的类型的开始
    这括号有跟没有 区别很大么?
      

  3.   

    java中有三种第一种是局部变量或属性 是在方法体内的
    第二种是成员变量或属性 是在方法体外,类体内的
    第三种是代码块变量或属性 就是两个大括号内的两个大括号是可以省略的,但有些时候不符合软件工程思想,因为有的变量只是在这里用了,在其他地方就不用了,垃圾回收机制会很快回收的,不长时间占用资源
      

  4.   


    {
    j = 37;System.out.println("initialization block executed");
    }
    非静态初始化代码块 当类被构造时 在变量初始化之后运行(例如int i = 0之后运行)
    但比构造函数先运行,主要用于匿名类 无法写构造器 但又需要在构造时初始化匿名类
    所以只能用到非静态初始化代码块staic{
    }静态代码块 在类被装载时运行 在类似 public static int i = 0;这种初始化代码之后运行
    主要解决一些类被装载是要解决的初始化问题 
    这些代码只会运行一次就是装载时运行