public class Person{

  {

   int a =6;

   if(a>4){

    System.out.println("Person的初始化块局部变量a的值大于4");     

   }

   System.out.println("Person的初始化块");

 }

   public Person(){

   System.out.println("Person类的无参数构造器");

  }

  public static void main(String[] args){

   new Person(); 

  }

}

程序输出:

   Person的初始化块:局部变量a的值大于4

   Person初始化块

   Person类的无参数构造器

从运行结果可以看出,当创建java对象时,系统总是先调用该类里定义的初始化块。

初始化块没有名字,也没有标识,不能通过对象或者类来调用。初始化块只在创建java对象时隐式执行,而且在执行构造器之前执行。

 

public class Test{

  {

   a=6; 

 }

   int a =9;

}

  public static void main(String[] args){

  System.out.println(new Test().a);//这行代码输出为9;

}

 总结:当java创建一个对象时,系统先为该对象的所有实例属性分配内存(前提是该类已经被加载过了),接着程序开始对这些实例属性执行初始化。其初始化顺序是:先执行初始化块或声明属性时指定的初始值,然后再执行构造器里指定的值。