什么是代码块
在Java中, 使用{ }括起来的代码被称为代码块,可分为局部代码块、构造代码块、 静态代码块。
局部代码块
位置:方法中定义
作用:限定变量的生命周期,及早释放,提高内存利用率
局部代码块在方法内部进行定义,在该代码块内部定义的变量作用范围也仅限于代码块内部,在代码块外部是无法访问代码块内部定义的变量的。
demo:
public class Test {
public static void main(String[] args) {
{
int a=10;
System.out.println(a);
}
System.out.println(a);
}
}
上面这段代码是无法执行的,第二个输出语句会报错,因为它在代码块外部无法访问代码块内部的变量,自然无法输出a的值。
构造代码块
位置:类中方法外定义
特点:每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
demo:
public class Test {
public static void main(String[] args) {
Student s1=new Student();
Student s2=new Student(2);
}
}
class Student{
{
System.out.println("这是构造代码块");
}
public Student(){
System.out.println("这是空参构造方法");
}
public Student(int a){
System.out.println("这是有参参构造方法");
}
}
执行结果:

结合代码和执行结果可以看到,每次创建对象时都会执行构造代码块,并且它在构造方法之前执行。
静态代码块
位置:类中方法外定义
特点:需要通过static关键字修饰,随着类的加载而加载,只执行1次
作用:在类加载的时候做一些数据初始化的操作
demo:
public class Test {
public static void main(String[] args) {
Student s1=new Student();
Student s2=new Student(2);
}
}
class Student{
static {
System.out.println("这是静态代码块");
}
public Student(){
System.out.println("这是空参构造方法");
}
public Student(int a){
System.out.println("这是有参参构造方法");
}
}
执行结果:

静态代码块需要用static修饰,我们知道static修饰的变量会随着类的加载而加载,由于类文件只加载一次,所以static修饰的变量也只会加载一次,这个规则在static修饰代码块时依然适用,所以静态代码块会随着类文件的加载而加载,并且只加载一次。
网友评论