何为代码块
在Java中用{ }括起来的的代码被称为代码块。
根据其位置和声明的不同,可以分为:局部代码块、构造代码块、静态代码块。
1、局部代码块:在局部位置,用于限定变量的生命周期,提高内存利用率。
就是平时用到的{ },例如:
class Arrays {
}
限定变量的生命周期:
public class Main {
public static void main(String[] args) {
int[] arr = {1, 34, 56, 43};
//代码块
{
int a = 10;
System.out.println(a);
}
//这里会报错,因为变量a的生命周期已经结束
System.out.println(a);
}
}
2、构造代码块:在类中的成员位置,用{ }括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。
作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化。
public class Main {
public static void main(String[] args) {
int[] arr = {1, 34, 56, 43};
//创建一个对象a
Arrays a = new Arrays();
//调用方法
a.printArray(arr);
//创建一个对象b
Arrays b = new Arrays();
}
}
class Arrays {
//构造代码块
{
System.out.println(123);
}
//构造方法
public Arrays() {
System.out.println("构造函数在这时执行");
}
//构造代码块
{
System.out.println(456);
}
//printArray方法
public void printArray(int[] arr) {
for(int i = 0; i < arr.length-1; i++) {
System.out.print(arr[i]+" ");
}
System.out.println(arr[arr.length-1]);
}
//构造代码块
{
System.out.println(789);
}
}
上面这段代码的执行结果是:
123
456
789
构造函数在这时执行
1 34 56 43
123
456
789
构造函数在这时执行
从以上结果可以看出,每创建一个对象构造代码块都会执行一次,并且都是在构造方法执行之前执行的。也就是说构造代码块的执行顺序与它放的位置无关(当然,构造代码块之间的执行顺序跟它写的顺序有关)
3、静态代码块:在类中的成员位置,用{ }括起来的代码。用static修饰。
作用:对类进行初始化。
public class Main {
public static void main(String[] args) {
int[] arr = {1, 34, 56, 43};
Arrays a = new Arrays();
a.printArray(arr);
Arrays b = new Arrays();
}
}
class Arrays {
//静态代码块1
static {
System.out.println("静态代码块1");
}
//构造代码块
{
System.out.println(123);
}
//构造方法
public Arrays() {
System.out.println("构造函数在这时执行");
}
//静态代码块2
static {
System.out.println("静态代码块2");
}
public void printArray(int[] arr) {
for(int i = 0; i < arr.length-1; i++) {
System.out.print(arr[i]+" ");
}
System.out.println(arr[arr.length-1]);
}
//静态代码块3
static {
System.out.println("静态代码块3");
}
}
上面代码执行结果:
静态代码块1
静态代码块2
静态代码块3
123
构造函数在这时执行
1 34 56 43
123
构造函数在这时执行
从执行结果来看,不论静态代码块是在构造代码块前边,还是在构造方法后边或者是在类的最下边都是第一个执行的,也就是说静态代码块的执行顺序与它放的位置无关(当然,静态代码块之间的执行顺序跟它写的顺序有关)。而且最重要的是不论创建几个对象,静态代码块都只在第一次创建时执行一次。也就是说,静态代码块只在类被编译时执行一次。
4、同步代码块: