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

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

  Java平臺(tái)是工程師的夢(mèng)想

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

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

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

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

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

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

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

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

  Java是一門強(qiáng)類型靜態(tài)語(yǔ)言

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

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

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