当年,某国际巨星的“龙种”曝光,众人指责他对不起娇妻,逼得他出面召开记者会,向世人自白他犯了“全世界所有男人都会犯的错误”。从来没犯过这种错误的我,也因此常常认为自己不是个男人。 虽然没犯过“全世界所有男人都会犯的错误”,但是我倒是曾经犯了“全世界所有程序员都会犯的错误”。不管使用何种语言,全世界所有程序员都一定犯过这种错误,那就是:太依赖编译器,却不知道编译器做了哪些事。4 W. r9 ]+ v, `4 s/ @5 F' ~' D5 K
2 R8 p$ b8 O8 u6 E9 K7 j: q 一般来说,越高阶的程序语言,会提供越多语法上的便利,以方便程序撰写,这就俗称为syntactic sugar,我称其为“语法上的甜头”。虽说是甜头,但是如果你未能了解该语法的实质内涵,很可能会未尝甜头,却吃尽苦头。. |6 N- ^8 M" Z8 ?
- Z' V7 ?+ H% \) B
不久前,我收到一个电子邮件,读者列出下面的Java程序,向我求救。看过这个程序之后,我确定这又是一个“全世界所有程序员都会犯的错误”。1 L* h# q7 [& E5 b
0 e! k7 K: q, _2 e* P6 a程序1; t, H9 F( j" u0 K1 |. L/ j
# Q; C4 o* s# ~6 K# L; e. g# l
class Singleton
0 \* j. ~2 C3 @! }5 w6 x! Z& W2 L{ H$ h$ v) ^) Z9 g7 l; H
private static Singleton
" B3 U; h! O, Q1 R7 v' {; y$ ~obj = new Singleton(); 3 ^- j, _+ h) f6 O
public static int counter1;
& c1 ~2 D' G' ^public static int counter2 = 0; # F. r5 A4 u: A) y) _
private Singleton() { ' a( I. v/ W- O6 _ N( l
counter1++;
6 Y' l! u, V& N- V* \5 Kcounter2++; $ x& _* ~9 O8 i3 l; }8 M! n* U
}
$ s1 t8 L; P: opublic static Singleton getInstance()
9 b9 O5 `" z: ^/ ^* v{ 1 w6 K& J U1 ]+ f( Y" V
return obj;
g/ B( Z+ I& g} 3 J: g# T3 }4 C5 u- i- p, ^
} |