Java中{}内的东西统称为代码块分为静态代码块、构造代码块、局部代码块、同步代码块
所有{}内定义的变量,其作用域仅限于该{},离开{}后其内部的变量栈空间和堆空间都被JVM(Java Virtual Machine)所回收而不能再使用。在{}中不能定以两个同名变量,不能定义两个相同的方法(方法名、方法参数类型和个数均一一对应的方法)。
- 静态代码块
public class <类名称> {
static {
<静态代码块中的语句>;
}
}
当类中有一个静态代码块时,静态代码块只执行一次,当有多个静态代码块时,按照总体先后顺序来执行静态代码块。
静态代码块针对类而言。当字节码文件进方法区时(也就是用new来调用构造方法产生实例时),就执行静态代码块。每个类的构造方法中默认第一条是父类的构造方法,也就是super();(这里根据用户书写的super();为主,当未写super();时,默认执行父类无参构造方法,且当父类没有无参构造时,编译器报错)。
- 构造代码块
public class <类名称> {
public <类名称>() {
}
{
<构造代码块中的语句>;
}
}
构造代码块和构造方法同级,在该类创建对象时调用,而且先于构造方法执行。当有多个构造代码块时,按照总体顺序一次执行。
- 局部代码块
局部代码块针对方法而言,在方法内的代码块。
public class <类名称> {
public <方法返回值类型> <方法名> (<方法参数类型> <参数名称>) {
{
<局部代码块中的语句>;
}
}
}
局部代码块处于某个方法中,离开作用域不能使用。当有多个局部代块时,按照总体顺序一一执行。
- 同步代码块
unknown
使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否则会导致数据的不一致性。同步代码块需要写在方法中。
程序代码块执行的一般过程
首先遇到new关键字用构造方法产生对象时,按顺序执行该类的父类中的所有静态代码块,然后执行子类的所有静态代码块,执行父类的构造代码块,在执行父类的构造方法,再执行子类的构造代码块,再执行子类构造方法,再执行下面的语句。(这里的先执行父类的方法是因为父、子类由于继承关系子类使用前要用父类数据)。