静态代码块,主要是对类变量进行初始化操作,类变量属于java类本身,只有当程序初始化该java类时才会为该类的类变量分配内存空间,并执行初始化。java虚拟机对一个java类只初始化一次,因此java程序每运行一次,系统只为类变量分配一次内存空间,执行一次初始化。
构造代码块,主要是对实例变量进行初始化。实例变量可以在三个地方进行初始化,第一,定义实例变量时指定初始化值。第二,非静态初始化块中对实例变量指定初始值。第三,构造方法中初始化实例变量。第一种或第二种最先获得执行。 但是当你使用javap -c 类名。分析代码,就会发现,三种初始化作用都一样。经编译器处理后,第一种和第二中的赋值语句都将合并到构造方法中(第一种和第二种的赋值语句位于构造方法自身代码的前面)。
|