Java中初始化块分为两种:
1.非静态初始化块
2.静态初始化块。
注意:
静态初始化块只在类加载的时候执行,且只执行一次,同时静态初始化块只能给静态成员变量赋值, 不能给普通的成员变量赋值。要想给普通成员变量赋值,可以使用非静态代码块或者构造函数。这些初始化块都是在构造函数之前执行的。
下面我们看一段代码:
public class Utils {
private int age;
private String sex;
private static String name;
private static final String TAG = "MainActivity";
static {
Log.e(TAG,"初始化name");
name = "author";
}
public Utils() {
Log.e(TAG,"初始化age");
age = 24;
}
{
Log.e(TAG,"初始化sex");
sex = "男";
}
}
调用:
Utils utils = new Utils();
Log.e(TAG,"===================");
Utils utils1 = new Utils();
输出结果为:
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化name
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化sex
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化age
06-27 15:20:49.534 15103-15103/? E/MainActivity: ===================
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化sex
06-27 15:20:49.534 15103-15103/? E/MainActivity: 初始化age
从输出结果中,我们可以看到首先会去执行静态初始化块,而且只会执行一次,然后会去执行非静态初始化块,而且他们都在构造方法之前执行。如果有多个同类型的初始化块,则会按照从上到下的顺序一次执行,你们可以试试看。