在Java中存在代码块这一结构这一结构又主要分为普通代码块和初始化代码块两类。
一、普通代码块
普通代码块仅出现于方法中,起到分隔不同功能代码的作用,其运行顺序依据代码块出现的先后。
public static void main(String[] args){
{
int x=3;
System.out.println("1,普通代码块内的变量x="+x);
}
{
int x=1;
System.out.println("主方法内的变量x="+x);
}
{
int y=7;
System.out.println("2,普通代码块内的变量y="+y);
}
}
}
二、初始化代码块
初始化代码块分为静态初始化代码块和非静态初始化代码块两类。
初始化代码块出现于类的主体中,在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。
这些初始化代码块起到了类的构造方法的作用,当无参实例化一个类的对象时,完全可以用代码块代替构造方法的位置。
非静态初始化块隐性运行于创建类的对象时,顺序依据代码块的先后排列,且这些代码块间可以存在其他方法。也就是说在实例化这个对象时,会从类的头到尾检索一遍来运行初始化代码块。
注意:
1.这些非静态代码块运行于类的初始化方法之前,且因为其没有名称,故只会在创建对象时隐性运行一次。
2.定义多个初始化代码块无意义。
现在再说静态初始化代码块,静态初始化代码块又被称为是“类初始化代码块”,因其早在系统将类初始化时就执行了,而不是在创建对象时执行。同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
而且要注意的是,系统在初始化类时,不仅会初始化该类中的静态初始化代码块,还回上溯到引用的包中的类的静态初始化代码块。