Java 静态初始化块

Java中初始化块分为两种:
1.非静态初始化块

Java 静态初始化块_第1张图片
非静态初始化块.png
    2.静态初始化块。
Java 静态初始化块_第2张图片
静态初始化块.png
    注意:
        静态初始化块只在类加载的时候执行,且只执行一次,同时静态初始化块只能给静态成员变量赋值,    不能给普通的成员变量赋值。要想给普通成员变量赋值,可以使用非静态代码块或者构造函数。这些初始化块都是在构造函数之前执行的。

下面我们看一段代码:

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

从输出结果中,我们可以看到首先会去执行静态初始化块,而且只会执行一次,然后会去执行非静态初始化块,而且他们都在构造方法之前执行。如果有多个同类型的初始化块,则会按照从上到下的顺序一次执行,你们可以试试看。

你可能感兴趣的:(Java 静态初始化块)