Java沒死,事實上它擁有足夠的能量讓你的應(yīng)用跑起來。那些對Java吹毛求疵人頻繁地聚焦在一些小眾問題上,總是和其他技術(shù)或者語言做些不公平的對比,這些語言并沒有像Java一樣得到廣泛應(yīng)用及長遠(yuǎn)的歷史。

  現(xiàn)在的小孩都能學(xué)Java,它在Web和企業(yè)開發(fā)中廣泛被采用,特別是近些年更是有了些讓人驚訝的改善,一些新特性正在籌備中。即使拋開這些新的特性,Java仍然很酷,應(yīng)用的廣泛性、JVM平臺背后卓越的設(shè)計、清晰的語法、擁有豐富的工具和庫文件構(gòu)成的生態(tài)系統(tǒng)。Oracle說有超過9,000,000 Java開發(fā)者(億萬的應(yīng)用和設(shè)備用戶),所以為什么我會聽到諸如“Java正在被淘汰中”,2007年開始,Java已經(jīng)淪為“21世紀(jì)的Cobol語言”的言論?

  Java平臺是工程師的夢想

  首先是Java平臺的存在,HotSpot JVM是一項非凡的設(shè)計,CLR(公共語言運行庫)有了大量的優(yōu)化,Java應(yīng)用在性能上甚至可以與C相媲美,當(dāng)然還有其他可選的虛擬機供可用(如:JRockit,Zing),應(yīng)你的環(huán)境有特殊的需求而定。

  再者,多種基于JVM的語言使得這個平臺更奇妙,如:Groovy,Jython,JavaFX,Scala,當(dāng)然還不局限于以上流行的語言。 Java現(xiàn)在包含有字節(jié)碼指令:invokedynamic和java.lang.invoke包,使得JVM構(gòu)建動態(tài)語言更簡單,現(xiàn)在已經(jīng)有超過50中基于JVM的語言。其中有意思的一個是php.reboot,它的目標(biāo)是保持php的哲學(xué)理念,但是移除了其中一些缺陷,而且它同樣能在Android中運行。

  Java是一門成熟的語言,并不適合“老人”

  Java成為被批評,抱怨,詛咒的靶子,我說這門語言還沒死,恰恰相反當(dāng)有人抱怨Java的時候正是推廣Java時機。人們總會做些奇怪的對比,好像仍然以為Java還是停留在1.4的版本,用記事本編寫、需要EJB2的支持、只能用來寫寫簡單的留言板,然后把這些用來與一個高端框架甚至是CMS來對比。

  作為Java程序員,這種對比對我來說沒有任何意義。更為明智的方法對比Java得理智地選擇競爭對手,看看Java vs PHP、Python或者Ruby,或者用框架Play對比Ruby on Rails,SpringMVC vs Zend Framework,有鑒于此,我覺得Java似乎根本不適合老人。

  Java 冗長嗎?當(dāng)然

  人們常說Java太?嗦了,減緩了運行速度。批評者矛頭通常指向Java的強類型靜態(tài)語言特性,缺乏前沿技術(shù)在語言中,然而,我認(rèn)為他們是經(jīng)過深思熟慮的,而且這正是Java良好的特性。動態(tài)語言在啟動一個小項目時開始會覺得很受歡迎,但是可以考慮一下,在時髦框架及合適的工具(如:考慮用IDE代替記事本)下創(chuàng)建一個“Hello留言板”類型的應(yīng)用,Java很簡單,只是10分鐘的事情,如果你想做個試驗的話,使用Spring Roo再準(zhǔn)備一個秒表,如果有需要的話,F(xiàn)在可以開始繁瑣的CRUD了。

  想象一下,你正為移動運營商搭建一個系統(tǒng),運行客戶登陸網(wǎng)站,你不得不在后臺調(diào)用各種子系統(tǒng)收集大量的數(shù)據(jù),Cool框架通常分解你的程序模塊而不需要匹配任何用戶模型。

  Java是一門強類型靜態(tài)語言

  強類型靜態(tài)語言有很多好處,我喜歡它簡單的視覺外觀,我可以粗略看一段代碼知道是做什么的,它像是可視化的用英語反饋,語言非常易讀,字母混合成單詞仍然可讀。其它的一些好處是有強大的IDE支持,動態(tài)語言在這點一直是弊端,大項目中有強大的IDE和工具支持是無價的。

  批判者的觀點在Java在讀文件、轉(zhuǎn)換xml或迭代集合的時候缺乏表達(dá)力,但是你可以總是創(chuàng)建一個方法去處理這些常用的事例,或者是用FileUtils.readLines(),java語言上表達(dá)力的缺點有很多庫對其支持。在Java7中能看到一些優(yōu)雅的加強型功能,如自動關(guān)閉資源、siwtch語句支持String、數(shù)字類型支持下劃線(強烈建議讀Coin項目)。Java8承諾了更多的東西(有意思的應(yīng)該是閉包)。Java是不是在任何方面都是那么的完美無缺呢?當(dāng)然不是,這是Java8、Java9在準(zhǔn)備階段的原因。我個人也不喜歡那些不太優(yōu)雅的核心API.是否的確將更多的事情留給平臺而不是語言本身?java核心包括API進階設(shè)計跨度長達(dá)20年,API的更新會破壞向后兼容性,有些設(shè)計太抽象,但有些還不夠抽象,有些太零碎,有些根本不可思議?纯雌涓偁帉κ.NET,核心API做的很好,比如統(tǒng)一的通信API。Java8在Jigsaw項目的幫助下,會有所改變。

  所以你值得擁有Java,正確地使用它,它是一門很棒的語言。堪比Klingon語言,它將繼續(xù)改善并不會很快消失。不應(yīng)把努力放在取代Java上,而是和其他JVM語言結(jié)合使用,這是明智的,但是對我的下一個Pet Clinic還是堅持使用Java。