实例1:html
public class bean1 { int d; int e; int c; int b; int f; { c = 3; } int a = 1; { b = 2; } public bean1() { d = 4; f = 5; e = 6; } public int geta() { return a; } }
使用javap -c bean1.class
查看反汇编代码以下:java
Compiled from "bean1.java" public class initialization.bean1 { int d; int e; int c; int b; int f; int a; public initialization.bean1(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: aload_0 5: iconst_3 //初始化c 6: putfield #2 // Field c:I 9: aload_0 10: iconst_1 //初始化a 11: putfield #3 // Field a:I 14: aload_0 15: iconst_2 //初始化b 16: putfield #4 // Field b:I 19: aload_0 20: iconst_4 //初始化d 21: putfield #5 // Field d:I 24: aload_0 25: iconst_5 26: putfield #6 // Field f:I 29: aload_0 30: bipush 6 32: putfield #7 // Field e:I 35: return public int geta(); Code: 0: aload_0 1: getfield #3 // Field a:I 4: ireturn }
结论:实例变量的初始化均在public initialization.bean1()
当中完成,不管是在声明时直接初始化,仍是在代码块当中初始化,本质均在构造函数里面进行初始化,在构造函数当中的初始化顺序取决于在定义直接初始化和代码块初始化中的顺序。函数
实例2:code
package initialization; public class bean2 { static int d; static int e = 5; static int c; int b; int f; int a = 1; static { c = 3; System.out.println("hello,static"); } { b = 2; System.out.println("hello"); } static { d = 4; } public bean2() { f = 6; } public int geta() { return a; } }
bean2
输出结果为:htm
hello,static hello
javap -c bean2.class
查看反汇编代码以下:blog
Compiled from "bean2.java" public class initialization.bean2 { static int d; static int e; static int c; int b; int f; int a; public initialization.bean2(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: aload_0 5: iconst_1 //初始化a 6: putfield #2 // Field a:I 9: aload_0 10: iconst_2 //初始化b 11: putfield #3 // Field b:I 14: aload_0 15: bipush 6 17: putfield #4 // Field f:I 20: return public int geta(); Code: 0: aload_0 1: getfield #2 // Field a:I 4: ireturn static {}; Code: 0: iconst_5 //初始化e 1: putstatic #5 // Field e:I 4: iconst_3 //初始化c 5: putstatic #6 // Field c:I 8: iconst_4 //初始化d 9: putstatic #7 // Field d:I 12: return }
结论:实例变量的初始化均在public initialization.bean2()
当中完成,不管是在声明时直接初始化,仍是在代码块当中初始化,本质均在构造函数里面进行初始化,在构造函数当中的初始化顺序取决于在 定义直接初始化和代码块初始化中的顺序;类变量在static {}中完成,且初始顺序以代码中顺序为主,类变量在实例变量前执行;ip
关于java final
能够查看:java final ;ci