也許你是只老鳥,也許你的程序編的很精,但是,在你的程序生活,你也許沒有注意到一些“常識性”的問題,因為有些時候我們不需要去注意,我們的程序照樣能夠運行得飛快,但是如果那天有一個無聊的人問你一個像這樣的問題,本來他是非常崇拜你的,可是因為你的一個疏忽就從他的心理掉價了。呵呵,開個玩筆,有一些東西我們還真的不得不注意,因為說不定我們那天就在這個小溝里翻了。
我個人也是個CODER,一直被外界的一些花哨的東西所忽悠著,一直就沒有心來看這些書,大致一翻,都懂,沒有什么看的。但是,懂是懂的,可是有很多的所以然,還真的說不出來。
1、Java里面默認值的誤解:
這個不是SUN公司的錯,怪只怪我們沒有仔細看文檔,因為我們所看的書中都可能是這樣的說“如果沒有分配值,系統會為變量自動分配置默認值”,我們就信以為真了,有些地方也確實是行得通的,在有時編程的時候也遇到沒有賦值就編譯通示過的提示,也沒有多去想。這個所說的默認值是指
類成員變量在沒有賦值的時候會賦以默認值,
其它局部變量是不能夠享受這種待遇的。這下懂了吧,為什么會出錯了,這里一定要給以初使值才行。
2、很少使用接口
當然這不是說我有這處毛病,你們就有,我只是說我自己,以免在黑暗中被拍了磚頭@。至少我相信有一大部朋友是這樣的,拿到一個東西,就直接在類里面去實現,因為為什么呢?沒有必要嗎,為什么要去多寫一個接口呢,這不是明擺著給自己找麻煩嗎?
說實話,就在寫這篇自我反省以前,我一直都是這樣的,可以說是從來沒有寫過接口,也許您會說,“從來沒有寫過接口也算是學JAVA”,不過不管你怎么說,確實沒有寫過,所有寫的都是直接在類中實現(注:我這里指的類表示非接口類)。如果有些小程序,確實不需要寫,因為實現也很簡單,也可能以后不需要繼承,也不需要在以后的某年某月再次重新優化一下,當然沒有必要了。
可是,這是一個習慣問題,當你走路習慣了左邊,那你走路的時候就不會走右邊,你就會在不知覺中去和車車親個嘴。我們應該培養自己的這種思維,讓我們不管在大小項目中,都會想到要這么做。有句古話叫“一屋不掃,何以掃天下”就是這個道理,而不是報以“大丈夫不拘小節”的態度。
你可能對這個為什么要寫接口還是不明白,就像《Think In Java》這樣說的,“如果你現在寫了一個功能,以后發現這個功能執行起來速度不理想的時候,如果你去代碼中改,那有可能會是增加BUG進去,如果我們使用了接口,就不用這么麻煩了,方法重寫就很好辦”,我想也是這樣的,我就經常犯這樣的錯誤,有些時候隨著時間的推移,連自己寫的程序,邏輯都還要慢慢去理。
3、讓一個類去做特定的事情
在《Think In Java》提到,把每個對象都當成服務的提供者,為什么這樣說呢?還是說現實的比喻吧,就像是一個人,我們如果希望他什么都會,結果也可能是他什么都會,但是沒有一樣東西是能夠拿出手的,都是半懂。而如果把這些東西分給多個人去學習,只要他們每人學自己那一部份,結果是每個人懂得都不是那么多,也不會有那么大的心理負擔去學習,最后都學得很精,結果綜合的深度,每個人都能夠獨擋一面,就是這個道理。
我個人也是經常犯這樣的錯誤,有些時候,一個類下來,什么亂七八糟的功能都有,結果后來多得連自己有時都分不清楚,那些方法在用,那些方法沒有用了。
4、根本不注重合理使用訪問控制:public, private, protected
我自己寫程序的時候,想到什么樣方便,就怎么樣使用,特別是對于類變量,不管定義成PUBLIC還是PRIVATE,都可以在當前類中使用無阻,這也應該就是讓我不注意的原因吧。如果完全是自己使用,可能出錯的機率不會太大,因為個人對這個應該還是熟悉的,但是如果你的應用程序需要發布,用戶來使用就會出錯,因為他們調用一個不能夠獨立執行的方法或者是變量。又或者是一個本來不需要對外公開的方法,你對外公開了,外面的用戶使用了,而在你后面的版本中,你又把這個方法更改了,那么使用者在調用這個方法的時候就會出錯,至少你寫的程序分健壯性就要打個問號了。
這是我現在發現的個人毛病,挑出來,希望以后不要再犯。最后見意,有經驗的程序員,不要忘了看看《Think In Java》,因為你們更容易犯錯,而在自己的錯誤中生存下去。