- 局部块:定义在方法中,解决变量作用域(只能在块中使用),可快速释放内存
- 构造块:直接在类中定义代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。如果存在多个构造代码块,执行顺序由他们在代码中出现的次序决定,先出现先执行。
- 静态代码块:在类中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
注意:静态代码块只能访问类的静态变量,和静态方法
静态代码块的先于构造快执行
执行顺序优先级:静态块>main()>构造块>构造方法
4. 同步代码块:使用synchronized(){}包裹起来的代码块,在多线程环境下,对共享数据的读写操作是需要互斥进行的,否 则会导致数据的不一致性。同步代码块需要写在方法中
package 四种代码块;
public class test {
private String name = "Bareth";
private static int age = 18;
//构造块1
{
System.out.println("这是第一个构造块——>name:" + name);
f1();
}
//构造块2
{
System.out.println("这是第二个构造块——>age:" + age);
f2();
}
//静态块1
static {
System.out.println("这是第一个静态块——>age:" + age);//只能调用静态成员和静态方法
f2();
}
//静态块2
static {
System.out.println("这是第一个静态块——age:" + age);//只能调用静态成员和静态方法
f2();
}
public test(String name, int age) {
this.name = name;
this.age = age;
}
public void f1() {
System.out.println("我是非静态方法");
}
public static void f2() {
System.out.println("我是静态方法");
}
public static void main(String[] args) {
System.out.println("-------------------------");
//普通代码块(局部块)
{
int x = 5;
System.out.println("我在普通代码块中" + x);
}
System.out.println("-------------------------");
test t1 = new test("zsr", 20);
System.out.println("-------------------------");
test t2 = new test("gcc", 20);
}
}