静态初始板块,构造方法和初始板块它们之间的执行优先级

来源:互联网 发布:c语言打开文件目录 编辑:程序博客网 时间:2024/05/16 00:40

论静态初始板块,构造方法和初始板块它们之间的执行优先级:

看下列代码:
public class Test_27_优先级 {//构造方法public Test_27_优先级() {  System.out.println("我是构造方法");}//静态初始板块static {  System.out.println("我是静态初始板块");}//初始板块{  System.out.println("我是初始板块");}public static void main(String[] args) {Test_27_优先级  test27 = new Test_27_优先级 ();System.out.println("------------");Test_27_优先级  test27_1 = new Test_27_优先级 ();}}
结果:
我是静态初始板块我是初始板块我是构造方法------------我是初始板块我是构造方法

从上面代码和结果当中我们可以了解到谁是最优先执行:
程序运行时静态初始代码块最先被执行
然后执行普通初始化板块
最后才执行构造方法
再者:
静态初始板块只能在类加载时执行一次,所以当再次创建对象  test_27_1时并未执行静态初始化块


package test;public class Test_27_优先级 {int num1;int num2;static int num3;//构造方法public Test_27_优先级() {num1=1; System.out.println("我是构造方法,为num1赋值");}//静态初始板块static {num3=3; System.out.println("我是静态初始板块,为num3赋值");}//初始板块{ num2 =2 ; System.out.println("我是初始板块,为num2赋值");}public static void main(String[] args) {Test_27_优先级  test27 = new Test_27_优先级 ();System.out.println("num1="+test27.num1);System.out.println("num2="+test27.num2);System.out.println("num3="+num3);System.out.println("------------");Test_27_优先级  test27_1 = new Test_27_优先级 ();}}

特别注意:

静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
0 0