Java 哪些事最困扰你?
相信在學Java編程的小伙伴都會遇到很多的問題,特別是當我們寫完程序的時候突然報個錯,然后找了半天,卻沒發現哪里報錯了,“我在哪”,“我在干什么”,“我寫了什么”“怎么會這樣”,會很爆炸的心態,有沒有,小編在剛學習編程入門的時候就是這樣的,下面小編整理了一些學習Java最困擾你的那些事:
Try-catch 聲明
雖然我才剛剛開始編寫 Java 程序,但是在Java 中實現讓程序停頓一些時間然后繼續運行這件事情已經復雜的令我震驚。除了寫下基本的指令完成停頓外,我還必須要用 try-catch 來包裹的這些操作。沒準對于大牛來說這不算什么,但是對我來講這太令人難過了。
還有跟所有 IO相關的異常也讓許多簡單的事情變得繁瑣起來。比如我僅僅想簡潔地做些事情,但最后總是會搞砸,。然后我不得不在所有方法上加上“throws Exception”。
沒有,沒有,還是沒有
沒有無符號的整形。
沒有操作符重載。
沒有對象屬性。
沒有代理 (盡管我聽說 Java 8 中可能引入了代理或類似機制,但我還沒細看)。
我同樣痛恨很多 Java 庫中引入模塊的方式(比如根據名稱加載模塊)。相對而言,我更希望在編譯時就能檢查我需要的依賴庫是否已經加載了。
找不到愛…
我恨 Java,就是單純的恨。負責任地說,我從不使用 Java 寫程序的最大因素就是因為我恨它。還有一點就是JRE糟糕的模塊化。就算你用了一些加載工具比如Launch4j,你仍然需要讓用戶安裝一個超過200 MB 的框架來運行程序。
沒有getter、setter
Java還缺少getter和setter注解。這樣可以更簡單的添加和移除模板代碼。
缺乏亮點
Java 缺少一些殺手級的模塊。雖然聽說一些不錯的模塊將被加入到Java 9.x 中,但目前為止這是我最大的槽點了。
非暴力不合作
我遇到的最大的麻煩就是如何一起使用基本元素和對象。例如, 把一個char 類型的變量轉換成一個列表別提有多費勁了,而且我感覺這種操作根本沒必要這么麻煩。
心愿單
我最想要的就是像 Perl 中那種上下文相關的函數了,以及當處理真正的異常時,這些函數可以在一個語言中所扮演的角色。
我還希望 Java 可以支持智能打包返回值,這樣我們就可以像在Perl中那樣返回一個包含多個值的列表了。
我希望使用異常的標準庫還可以在不適合拋出異常的場景下使用并能夠處理失敗。
還有,另一個煩人的地方就是我在用 StringWriter 時候還要處理 IO 異常。
還缺些什么
缺少宏對我來說使 Java 減分不少(我并不說在 C/C++ 中使用的預處理器宏,而是在Lisp/Scheme 中使用的那種宏)。
不論做什么事情你都需要定義一個類,盡管你可能根本不需要一個類。比方說,我想把一段經常使用的代碼提取出來,然后在需要地方使用——為了達到這個目的,我必須要把這段代碼封裝成一個final static的方法,并放在一個類中。這樣一來我還得費勁去給類取一個方便理解的名字……本來這事兒可以很簡單(這確實很簡單, 尤其是當你可以定義宏的時候)。
有沒有搞錯
缺乏對泛型的支持。C++ 中的模板要強大的多。
事實上,在Java 中你根本不能在泛型中實例化一個類,除非你把這個類作為參數來聲明一個泛型。
你很難給一個類加上結構函數并讓它銷毀這個類。RAII(一種資源管理模式,見 C++)卻一直非常有用。
沒有操作符重載。C++ 允許你是將 == 操作符用于比較字符串。同樣的,大整數運算因為同樣的原因變的很難使用。
呃, 好吧
沒有無符號的基礎類型。這尼瑪是鬧哪樣啊!
還是getter、setter
1、null(最大槽點)。
2、沒有getter和setter注解(例如,沒有屬性)。
3、Java 只支持位置參數。我喜歡像Smalltalk 那種支持多樣化的參數形式,或者是強制使用關鍵字參數的Python 3。
比如在 Samlltalk 中調用一個具有兩個參數的函數,可以這樣做:
myInstance myMethodWithFoo: arg1 Bar: arg2
在 Python中你可以使用下面的語法來調用函數并給函數參數賦值:
my_inst.my_method(foo=arg1, bar=arg2)
4、……不支持多分派(Multiple Dispatch)?
這些是我最先想到的,不過覺得應該還有更多。認真地說,使用回調函數一直是一個大問題,因為它太麻煩了。不過Java 8 中解決了這個問題,我還是很開心的 =)
愚蠢的默認值
默認的可見性。如果沒有給變量或方法一個修飾符,那么這個方法應該是私有的,而不是包內可見。
默認的修改能力。最終類型(在所有情況下)應該是默認的,并用“var”作為修飾符。目前的情況是,程序員很少會把一個方法的參數設置為最終類型,因為那樣會讓變量很快變得不可讀。同時,在一個方法中重寫參數也是很少見的情況。
集合接口。Java 中應該提供一個可寫的集合接口,現在集合繼承自這個可寫的接口,只是把所有改變集合內容的方法屏蔽掉。這樣就會減少現在你會在Collections.unmodifiable…… 和一些第三方的API中見到的那些令人困惑的歷史遺留方法。有了可寫的集合接口,Java 將會變得更加類型安全。
缺少表達能力。在用過Scala (或是最新的PL)之后, 你會覺得Java 非常的繁瑣。這是最常見的關于Java 的吐槽,但它這就是事實。
說說異常
被強迫的處理異常——真主保佑你。誰能告訴我為什么我非要用try-catch 來包裹每一個Thread.sleep ……?我從來就沒有真正見過那個我被要求去處理的InterruptedException。
我知道我要說的可能不是一個廣泛認可的問題,但是我真的同意checked exception(應被檢查的異常)很煩人。這些異常讓代碼變得面目全非還讓重構變得不可能。我明白他們為什么存在(而且理論上也說的通),但是他們沒為開發者帶來什么實質好處。不論你做什么,都不要留一個空的catch 塊,就算你認為這個異常永遠不會發生。你大可以把這個checked exception用RuntionException(運行時異常)重新封裝一下,再拋出去。?
? ? ? ?為了讓學習變得輕松、高效,今天給大家免費分享一套Java入門教學資源。幫助大家在成為Java架構師的道路上披荊斬棘。需要入門的資料歡迎加入學習交流群:9285,05736
總結
以上是生活随笔為你收集整理的Java 哪些事最困扰你?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html分类页面,CSS网页设计 把HT
- 下一篇: db2 sql 判断select是否为空