学习笔记20170628

来源:互联网 发布:c语言计算时间间隔 编辑:程序博客网 时间:2024/06/12 00:15

一、初始化块

1、普通初始化块

初始化块是Java类里可以出现的第四种成员(前面依次有成员变量、方法和构造方法),一个类里可以有多个初始化块,执行顺序是:前面定义的初始化块先执行——>后面定义的初始化块后执行——>类的构造方法,初始化块的修饰符只能是static,初始化块里的代码可以包含任何可执行性语句,包括定义局部变量、调用其他对象的方法,以及使用分支、循环语句等。

例如:

public class Person{

           //下面定义一个初始化块

          {

            int a = 6;

            if(a>4){

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

}

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

}

     {

             //定义第二个初始化块

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

}

//定义无参的构造方法

    public Person(){

          System.out.println("Person类的无参构造方法);

}

public static void main(String[] args){

      new Person();

}

}


上面程序的main()方法只创建了一个Person对象,程序的输出如下:

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

Person初始化块

Person的第二个初始化块

Person类的无参构造方法


注意:虽然java允许一个类里定义2个普通初始化块,但这没有任何意义。因为初始化块是在创建java对象时隐式执行的,而且它们总是全部执行,因此完全可以把多个普通初始化块合并成一个初始化块,从而可以让程序更加简洁,可读性更强。




2、静态初始化块

如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块(普通初始化块负责对对象执行初始化,类初始化块则负责对类进行初始化)。静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行。因此静态初始化块总是比普通初始化块先执行


注意:静态初始化块也被称为类初始化块,也属于类的静态成员,同样需要遵循静态成员不能访问非静态成员的规则,因此静态初始化块不能访问非静态成员,包括不能访问实例变量和实例方法。