代码块根据所处位置,以及修饰符不同分为三种(暂时忽略同步块)
局部位置:
第一种: 局部代码块; (作用:限制局部变量的生命周期,节约内存空间)
成员位置(类中方法外):
没有被static 修饰:
第二种: 构造代码块 ; (作用(特点): 抽取自所有构造方法的公共部分,在 每一次 创建对象时 优先于构造方法执行 ; 换言之, 构造代码块执行完之后,构造方法才开始执行)其实构造代码块也是可以给对象初始化的,它构造方法的给对象的初始化有什么不同呢?
构造方法给对象的初始化的特点是: 构造方法给特有对象做特有的初始化
构造代码块给对象初始化的特点是: 构造代码块给所有对象做统一的初始化(比如:可以统一改变对象字段的默认初始化)
被static 修饰:
第三种: 静态代码块 ; (作用(特点): 用于给类初始化 ;属于类的一部分,当类加载时执行,并且只执行一次;为什么要用静态代码块给类初始化呢?构造方法也可以初始化呀?
这是因为一部分类里边的成员全都是静态的不需要创建对象,那么就不会调用构造方法,这样构造方法的初始化也就无从谈起,只能用静态代码块来做一些必要的初始化工作 )
局部位置:
第一种: 局部代码块; (作用:限制局部变量的生命周期,节约内存空间)
成员位置(类中方法外):
没有被static 修饰:
第二种: 构造代码块 ; (作用(特点): 抽取自所有构造方法的公共部分,在 每一次 创建对象时 优先于构造方法执行 ; 换言之, 构造代码块执行完之后,构造方法才开始执行)其实构造代码块也是可以给对象初始化的,它构造方法的给对象的初始化有什么不同呢?
构造方法给对象的初始化的特点是: 构造方法给特有对象做特有的初始化
构造代码块给对象初始化的特点是: 构造代码块给所有对象做统一的初始化(比如:可以统一改变对象字段的默认初始化)
被static 修饰:
第三种: 静态代码块 ; (作用(特点): 用于给类初始化 ;属于类的一部分,当类加载时执行,并且只执行一次;为什么要用静态代码块给类初始化呢?构造方法也可以初始化呀?
这是因为一部分类里边的成员全都是静态的不需要创建对象,那么就不会调用构造方法,这样构造方法的初始化也就无从谈起,只能用静态代码块来做一些必要的初始化工作 )