【 tulaoshi.com - 编程语言 】
下面是我用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的书却鲜少这么做。 虽说是“全世界所有程序员都会犯的错误”,但是这不代表你犯了此错误之后,仍可以“抬头挺胸、理直气壮”。只要有心,其实这一类的错误仍是可以避免的。