一、概述
使用大括号包起来的一段代码。放在不同的位置,有不同的名称,有不同的作用,有不同的执行时机。
二、分类
1.局部代码块
- 位置:局部代码块位于方法体中;
- 作用:限定变量的生命周期,及时的释放内存空间提升代码的运行效率;
- 执行时机:该方法被调用时执行;
- 注意事项:
1)如果是在局部代码块中声明了变量,会减少变量的声明周期,出了局部代码块就无法继续使用局部代码块中声明的变量。
2)如果是在局部代码块中修改了局部代码块外声明的变量,局部代码块结束之后,并不会消除局部代码块对这个变量的修改。 - 代码示例
public static void main(String[] args) {
int c = 66;
//局部代码块
//作用:用于限定变量的作用域,让没有用的变量,及时被回收释放内存空间
{
int a = 3;
System.out.println(a);//3
c = 5;
}
//System.out.println(a);会报错
System.out.println(c);//5
}
2.构造代码块
- 位置:位于类中方法外;
- 作用:用于给成员变量初始化赋值;
- 执行时机:创建对象时执行;
- 执行说明:
(1)在创建对象的时候执行,由jvm默认调用
(2)在构造方法执行之前,执行
(3)任意一个构造方法执行之前,都会执行一次构造代码块的内容
(4)将每个构造方法都会执行的内容,提取到构造代码块中
(5)默认初始化 > 显式初始化赋值 > 构造代码块赋值 > 构造方法初始化. - 代码示例:
class Test {
String name;
public Test() {
this(null);
}
public Test(String name) {
System.out.println("构造代码块执行了");
this.name = name;
}
//构造代码块
{
System.out.println("构造代码块执行了");
}
}
3.静态代码块
- 位置:类中方法外;
- 作用:
用于给静态的成员变量初始化赋值
用于执行那些只需要执行一次的代码,例如驱动加载等 - 执行时机:类加载的时候执行;
- 执行特点:
(1)随着类的加载而执行
(2)类只加载一次,所以静态代码块只执行一次
(3)执行的时机最早:早于所有的对象相关内容 - 代码示例:
class Test1 {
//静态代码块
static {
System.out.println("静态代码块执行了");
}
//构造代码块
{
System.out.println("构造代码块执行了");
}
}