回覆列表
-
1 # 驄耀說外貿
-
2 # leisiege
編譯期間泛型,有時候執行期間就會讓人疑惑,欄位的get.set不如c#的屬性方便,stream的api說實在的很難用。不如c#簡潔。模組化最近才出來,之前都是打包工具來做這些。其實問題就可以看java升級文件,文件寫了什麼,就說明之前做的不好
編譯期間泛型,有時候執行期間就會讓人疑惑,欄位的get.set不如c#的屬性方便,stream的api說實在的很難用。不如c#簡潔。模組化最近才出來,之前都是打包工具來做這些。其實問題就可以看java升級文件,文件寫了什麼,就說明之前做的不好
Java的出發點是提供一個比C/C++“安全”得多的程式設計環境。雖然GC和陣列越界檢查起到了很大的作用,但是Java又在以下3點偏離了安全初衷,使得程式設計師仍然需要時時刻刻提醒自己才不會犯錯
整數計算會無聲overflow/underflow。這就是說你不能用c = (a + b) / 2來計算兩個整數的平均值。由於這個非常反直覺,而且一旦溢位程式設計師也得不到提示,因此歷史上造成了JRE的標準庫裡潛伏很多很多年的bug多執行緒情況下的Memory Model。由於向性能妥協,這個機制偏複雜,在沒有深入研究的情況下大多數程式設計師都會犯錯。更糟的是很多Java程式設計師甚至不知道這個概念(也許連volatile這個關鍵字都沒用過)Exception。理論上Unchecked Exception幾乎可以從任何一行呼叫中冒出來,因此分析程式碼的時候程式設計師不僅要理解正常情況下的程式流程,還要兼顧任何一行冒出異常的情況。這是非常大的思想負擔(C程式設計師就不要擔心這個)。如果處理不好,異常會破壞程式核心物件圖的完整性,導致任意後果的程式bug