下面是我用javap來反組譯程序1的示范: C:> javap -c -classpath . Singleton Compiled from MyMain.java class Singleton extends java.lang.Object { public static int counter1; public static int counter2; public static Singleton getInstance(); static {}; } Method Singleton() 0 aload_0 1 invokespecial #1 4 getstatic #2 7 iconst_1 8 iadd 9 putstatic #2 12 getstatic #3 15 iconst_1 16 iadd 17 putstatic #3 20 return Method Singleton getInstance() 0 getstatic #4 3 areturn Method static {} 0 new #5 3 dup 4 invokespecial #6 7 putstatic #4 10 iconst_0 11 putstatic #3 14 return 其實Java的syntactic sugar並不算多,C#的syntactic sugar才真的是無所不在,也因此C#的初學者更輕易犯了“全世界所有程序員都會犯的錯誤”。 許多C#的書都會一邊介紹C#語法,一邊介紹編譯之後MSIL(.NET的中間語言,類似Java的Bytecode)的結果,然而Java的書卻鮮少這麼做。 雖說是“全世界所有程序員都會犯的錯誤”,但是這不代表你犯了此錯誤之後,仍可以“抬頭挺胸、理直氣壯”。只要有心,其實這一類的錯誤仍是可以避免的。