疯狂Java 程序员基本功的16课(对象与内存的控制)心得(二)
紧接着 疯狂Java 程序员基本功的16课(对象与内存的控制)心得(一),这篇是对类变量初始化的详解
类变量的初始化只是在第一次类初始化时为类变量分配一次内存空间和一次初始化,它可以初始地方有:
public static void main(String[] args) {System.out.println(three);System.out.println(four);StaticTest st = new StaticTest();System.out.println(st.five);System.out.println(st.six);}public static void main(java.lang.String[]); Code: 0: getstatic #4; //Field java/lang/System.out:Ljava/io/PrintStream; 3: iconst_3 4: invokevirtual #5; //Method java/io/PrintStream.println:(I)V 7: getstatic #4; //Field java/lang/System.out:Ljava/io/PrintStream; 10: getstatic #6; //Field four:I 13: invokevirtual #5; //Method java/io/PrintStream.println:(I)V 16: new #7; //class StaticTest 19: dup 20: invokespecial #8; //Method "<init>":()V 23: astore_1 24: getstatic #4; //Field java/lang/System.out:Ljava/io/PrintStream; 27: aload_1 28: invokevirtual #9; //Method java/lang/Object.getClass:()Ljava/lang/Class; 31: pop 32: iconst_5 33: invokevirtual #5; //Method java/io/PrintStream.println:(I)V 36: getstatic #4; //Field java/lang/System.out:Ljava/io/PrintStream; 39: aload_1 40: getfield #3; //Field six:I 43: invokevirtual #5; //Method java/io/PrintStream.println:(I)V 46: return??上面红色标记可以看到,three和five已是直接量(常量)也叫宏变量,编译器会把程序中用到该变量的地方都替换成改变量的值。