Java已死?九百萬程序員說不

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

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

Java平臺是工程師的夢想

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

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

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

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

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

Java 冗長嗎?當然

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

想象一下,你正為移動運營商搭建一個系統,運行客戶登陸網站,你不得不在后臺調用各種子系統收集大量的數據,Cool框架通常分解你的程序模塊而不需要匹配任何用戶模型。要更多的了解建議你看看Joel Spolsky發表的一篇文章。

Java是一門強類型靜態語言

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

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

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


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451122.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451122.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451122.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux SSH遠程管理故障如何排查?

SSH遠程管理故障排查方案:1、檢測兩個機器是否暢通兩個機器之間是否暢通,查看物理鏈路是否有問題(網線網卡、IP是否正確)第1步:物理鏈路是否暢通,比喻為“高速公路是否暢通”ping 排查客戶端到服務端的線路問題,ping是…

CSS中position的absolute和relative用法

static: HTML元素的默認定位方式absolute: 將對象從文檔流中拖出,使用left,right,top,bottom等屬性進行絕對定位。而其層疊通過z-index屬性定義。絕對定位的元素的位置相對于最近的已定位父元素,如果元素沒有已定位的父…

Spring HttpMessageNotReadableException異常

(一)現象 我們在進行服務間的rpc調用時,可能會遇到org.springframework.http.converter.HttpMessageNotReadableException異常。 其具體報錯如下: {"timestamp": 1456043810789,"status": 400,"error…

解決 -- java 調用webservice 服務端收到參數為null

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我的客戶端和服務端都寫的很簡單,只是調用服務的時候, 服務端得不到參數,后來發現只改一個地方就可…

fastJson性能測試

測試裝備: mac pro 6核12線程 測試代碼: (1)序列化對象: import lombok.Data;Data public class User {int id;String name;int age;String address; } (2)序列化邏輯: import…

避免流量高峰期CDN問題的10個方法

在視頻流媒體中,因平臺火爆而出現問題是件好事。至少,這比根本沒有觀眾要好。\\也許你正在使用世界級的CDN,但是,在大型賽事期間,當CDN的服務器和對等點流量變得飽和的時候,一些用戶還是無法享受到流暢的體…

Android應用進入爆發期 手機游戲仍是市場重心

近日,91無線發布了《91無線移動應用發展趨勢報告(Android版)》。報告顯示,2012年,無論Android移動應用用戶下載還是開發者研發均呈爆發態勢,手機游戲仍是市場重心所在。同時,Android移動應用下載…

MQTT Client軟件-MQTTBox

最近發現了一個連接mqtt broker的軟件:MQTTBox。GitHub地址:https://github.com/workswithweb/MQTTBox 官網網站的介紹為:使用MQTTBox增強你的物聯網流程 MQTT客戶端特性 支持TCP、TLS、Web Sockets和安全的Web Sockets連接MQTT服務器支持各種…

fastJson toJSONString注意點

fastJosn是阿里爸爸推出一款高性能序列化工具,號稱最快的json序列化工具。不過好像也就那樣,在量比較大的時候優勢才會明顯。單次序列化時間還是會達到幾十毫秒的級別。 Fastjson is a Java library that can be used to convert Java Objects into the…

WebService中文件傳輸

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 WebService處理傳遞普通的信息,還可以傳輸文件,下面介紹WebService是怎么完成文件傳輸的。 1、 首先編寫服務器端…

Django框架-Form組件

一、DjangoForm組件介紹 我們之前在html頁面中利用form表單向后端提交數據時,都會寫一些獲取用戶輸入的標簽并且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗,比如驗證用戶是否輸入,輸入的長度和格式等是否正…

中國經濟轉型知易行難

摘要:一個亞洲國家正在崛起,出口機器勢不可擋,財富快速增長,覺得美國已是過去,自己的時代已經到來。這是2012年的中國?沒錯———但也是上世紀80年代的日本。 美國《芝加哥論壇報》網站5月20日文章&#xf…

進程和線程的剖析

進程和線程的區別?什么時候用進程?什么時候用線程? 答:首先得知道什么是進程什么是線程? 我的理解是進程是指在系統中正在運行的一個應用程序;程序一旦運行就是進程,或者更專業化來說&#xff1…

解決 java.net.ConnectException: Connection refused: connect 異常

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、 我的情況很簡單: 只是因為我調用服務端接口方法包名沒有寫對,應該如下面代碼中這樣寫: call.…

主席樹的各類模板(區間第k大數【動,靜】,區間不同數的個數,區間=k的個數)...

取板粗 好東西來的 1.(HDOJ2665)http://acm.hdu.edu.cn/showproblem.php?pid2665 (POJ2104)http://poj.org/problem?id2104 (POJ2761)http://poj.org/problem?id2761 題意:求區間第K大&…

java類內部的變量

類內部的變量分為兩部分: 一.類的成員變量 在類內部,變量定義部分,定義的變量。 二.局部變量 在類內方法體中定義的變量和方法中涉及的變量。 成員變量和局部變量的區別: (1)成員變量在整個類中都有效…

騰訊搜搜退出PC搜索領域:百度搜狗迎來雙龍競爭

摘要:據北京商報報道,上周末,騰訊對公司組織架構進行了大規模調整。業內普遍認為,搜搜并入騰訊無線后,這個獨立搜索平臺將被合并,失去獨立性,也將令搜搜官網域名soso.com走向“沒落”。據北京商…

facade-pattern外觀模式

外觀模式: 外觀模式是面向對象編程中的重要設計模式。外觀類用來掩蓋復雜的內部邏輯,為用戶提供簡潔統一的服務接口。外觀類的主要功能如下: 1.通過提供簡明的對外API接口,來提高程序的可閱讀性和間接性。 2.提供通用的特定功能…

Web Service 客戶端,調用服務方法

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 只是最簡單的調用web service 服務,至于要傳什么參數全看到業務了。 以下是最簡單的調用方式 : package hdmp…

分享Spring Cloud分布式微服務架構圖

分布式、微服務、云架構JAVA語言開發、跨平臺、高性能、高可用、安全、服務化、模塊化、組件化、驅動式開發模式 從現在開始,我這邊會將近期研發的springcloud微服務云架構的搭建過程和精髓記錄下來,幫助更多有興趣研發spring cloud框架的朋友&#xff0…