package smartt.styy.auth.model.voRsp;public class Test {static {String test5="555";//局部变量test2 ="2222222";//System.out.println("此处的test2可以在static块中赋值,但不能调用:"+test2);System.out.println("静态代码块:"+test5);}public static final String test1="111"; //常量public static String test2="222"; //静态变量public String test3="333"; //成员变量public void ok(){String test4="4444"; //局部变量System.out.println("普通方法加载:"+test4);}//静态属性是先于代码块加载的//静态代码块//构造代码块{test2 ="111111";System.out.println("构造代码块:"+test2);}public static void main(String[] args){Test te =new Test();te.ok();}}
输出结果:
静态代码块:555构造代码块:111111普通方法加载:4444
执行顺序:
1、类内容(静态变量、静态初始化块) => 实例内容(变量、初始化块、构造器)
2、父类的(静态变量、静态初始化块)=>子类的(静态变量、静态初始化块)=> 父类的(变量、初始化块、构造器)=> 子类的(变量、初始化块、构造器)
初始化块可以对在它之后定义的变量赋值,但不能访问(如打印)。
变量最终值:一个变量,若显示初始化、初始化块对该变量赋值、构造方法对该变量赋值同时存在,则变量最终值如何确定:
1、按执行顺序
2、若对变量赋值的初始化块在变量定义前时:若变量显示初始化了则最终为显示初始化值,否则为初始化块的赋值。