大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

為什么選擇Java


  在如此多的程序代碼中,為何Java可以脫穎而出,今天請動力節點的Java老師為我們大家講講是什么讓Java如此大放異彩。

 

  Java虛擬機(JVM)

 

  Java虛擬機(JVM)已經誕生20年了。在此期間,它被部署在成千上萬的系統上,歷經了無數的漏洞修復和性能提升。JVM的優點有以下幾個方面。首先,JVM支持日志和監控,這使你可以很方便地監控小到單個線程的性能指標。JVM有世界上非常優化的垃圾回收器之一,可以根據優化吞吐量等因素靈活選擇垃圾回收算法。并且,Java承諾的“writeonce,runanywhere”終于得已實現——可以輕松地在任何架構上部署一個Java應用(大家還是承認applet從來沒有過吧)。為什么用Scala和Clojure這樣新式語言的聰明人會選擇JVM作為他們的執行環境呢?——因為JVM為代碼提供了一個無出其右的分發環境。拋棄像JVM這樣堅如磐石的工具是非常不合理的。

 

  庫的支持

 

  如果需要做點什么,很可能已經有非常好用且經過測試的Java庫在等著你。Java庫大部分都是成熟并用于實際生產開發的。Google,Amazon,LinkedIn,Twitter和很多Apache項目都很倚重于Java。如果你用了Java,你可以參考這些庫和公司,從而借鑒偉大的程序員先驅們的工作。

 

  類型安全

 

  Java的類型系統,雖然有時很繁瑣,但是這使得你可以寫出“好用”的代碼。不再有運行調試,它使你可以依靠編譯器而不是單元測試——單元測試只在你知道bug在哪里的時候才有用。類型安全也使你輕松的代碼重構。Java同時支持范型——Go語言的較大詬病之一。再者,Guava這樣的庫以更小的樣板和開銷,標準化了創建類型安全的API的方法。Java編譯器的改進也意味著你可以在享受類型安全的同時zui小化范型所需的樣板代碼。

 

  并發性

 

  下面這條tweet總結了大多數動態語言的并行狀態:

 

  Java卻有著對多線程和并行的一流支持。對于Java1.7,許并行的immutable數據結構令你輕松地在線程間共享數據。Akka庫更進一步的提供了Erlang型的Actors來寫并發和分布式的程序。我并不是在說Java比Go具有更好的并行支持,但是可以管理單個線程這一特性為Java應用提供了異步性能;而Python是做不到這點的。

 

  用更新的Java來編程

 

  現在你的心情可能已經從惡心變成好奇了,那么我們在2016年該如何寫Java呢?從哪兒開始呢?首先,讓我們回顧一些在Java7和Java8涌現的核心語言概念。

 

  迭代

 

  首先我們一起來看看迭代。下面是Java8中的for循環:

 

  或者是被大大簡化的for關鍵詞?

 

  這2種循環結構都比你平時看到的for循環簡潔的多。

 

  Lambda函數

 

  上面提到的第一個for循環引入了Lambda函數這個新概念。Lamda函數,語法記作->,是Java語言的一項重大改革,并從函數式編程中引入了一些概念。

 

  下面來看幾個Java中Lambda函數的例子。

 

  流

 

  Java8引入了流(stream)的概念,這為Java提供了很多現代函數式語言的特性。流是一種對集合上的一系列轉換延遲執行的機制。比如我們來數一下以’A’開頭的名字。首先想到的方法肯定是像下面這樣:

 

  如果用流,上述就可以簡化為首先將集合轉換成流,然后使用函數:

 

  Java同時支持用parallelStream()來進行流的并行處理。并行流允許流水線業務在獨立的線程同時執行,這不僅改進了語法,同時提高了性能。在大多數情況下,你可以簡單得用parallelStream()替換stream()實現并行。

 

  Try-With-Resources結構

 

  在Java6之前,打開一個文件然后讀取內容需要通過try/finally來完成:

 

  但是readLine和close都有可能拋出異常。在這種情況下,readLine拋出的異常被忽略,我們事實上并不知道readLine執行失敗。

 

  Java7引入了Try-With-Resources結構來克服這種缺陷:

 

  上例中,無論在何種失敗情況下,BufferedReader都會自動關閉文件流。你可以通過用逗號分隔的方式,用一個try語句來打開多個資源。

 

  多重catch

 

  以往Java只允許一個catch代碼塊對應一個異常,這造成如下的代碼冗余:

 

  從Java7開始,你可以在一個代碼塊內捕捉多個異常,從而減少了代碼冗余:

 

  數值字面常量(NumericLiterals)

 

  數值字面常量可以添加下劃線是Java語言的新特性。這允許你使用_作為大數字的視覺分隔符。下面的例子不言自明:

 

  使用Java

 

  看到現代Java的語法如何簡化并擴展了老Java之后,你可能已經摩拳擦掌躍躍欲試Java了。動力節點的老師為大家整理了一下第三方的工具和庫,這些可以用來幫助你們上手。

 

  Maven

 

  Maven是一個Java構建系統,相比于配置,它更重視規范。Maven定義了應用程序的結構,并提供了許多內置函數,比如運行測試,打包應用,部署你的庫。使用Maven會顯著降低管理Java項目的認知開銷。MavenCentral是Java世界中的PyPI,為已發布的Java庫提供一站式服務。

 

  核心函數

 

  谷歌的Guavalibrary提供了谷歌Java開發中所使用的核心函數。這包括應用于集合,緩存,基礎數據類型,并發,字符串處理工作,I/O等的常見函數。Guava為如何設計好的的JavaAPI提供了非常好的案例分析,提供從Java中推薦的實踐的具體例子一個很好的案例,EffectiveJava中推薦的實踐大部分都在Guava中得以體現。Guava被用于谷歌產品開發,進行了超過286,000個單元測試,可謂經受過實戰測試的考驗。

 

  日期/時間函數

 

  Joda-Time已經成為Java實際上的標準日期/時間函數庫。事實上,Java8幾乎一字不差地采用了Joda-Time規范。自此,我們建議使用java.time中的日期/時間函數代替Joda-Time。但是,如果你需要使用Java8之前的版本,Joda-Time提供了很棒的API。

 

  分布式系統

 

  Akka提供類似Erlang型的Actor模型的抽象層來編寫分布式系統。Akka可以從容應對許多種不同的故障,為編寫可靠的分布式系統提供了更高層次的抽象。

 

  Web應用程序

 

  需要用Java寫一個功能完善的Web應用程序?莫怕,有PlayFramework罩著你。Play基于Akka的非阻塞I/O,提供了編寫Web應用程序的可擴展的異步框架。如果想使用不那么前沿但是被廣泛應用于產品的框架,請嘗試Jetty。

 

  單元測試

 

  JUnit仍為編寫單元測試的標準。近幾年,JUnit的匹配器有所擴展,允許你對集合作assertions。例如,您可以輕松地斷言一個鏈表是否包含某個特殊值。

 

  模擬框架(MockingFramework)

 

  Mockito是Java的標準模擬庫。它提供了所有你能想到的且對編寫測試非常重要的模擬庫的功能。

 

  然而不足的是。。。

 

  目前為止,我一直在為Java說好話,但是有些方面它還是很爛。

 

  它還是Java!

 

  Java的歷史遺留不可避免,Java仍然向下兼容其zui早的版本,這意味著語言和標準庫的zui爛的部分還存在著。Guava是為了令Java語言更討人喜歡而產生這個事實就證明了,Java和API存在不一致,令人困惑的問題,有時甚至是完全錯誤的。

 

  JSON

 

  Java缺少映射到JSON的objectliteralsyntax(如Python的字典literalsyntax)。正因如此,從Java對象映射到JSON有時需要繁復的對象實例化和映射,反之亦然。目前有各種JSON庫在這個領域競爭,Jackson是當前的備受歡迎的,但是Jackson的文檔需要進一步完善。

 

  模擬(Mocking)

 

  Mockito解決了測試Java代碼中的很多痛點,但是從像Python語言的靈活轉換到Java語言的嚴格,你需要更謹慎地來設計你的類用于模擬。

 

  REPL

 

  之所以喜歡Python,其中一點就是它可以迅速地實現讀取﹣求值﹣輸出循環(read-eval-printloop),從而快速評估新的想法或檢驗假設。雖然一直有聲音說要把讀取﹣求值﹣輸出循環添加到標準Java庫,這一點目前還是不支持的。

 

  語法累贅

 

  雖然Java編譯器的進步意味著明確的類型簽名不再那么需要——尤其對于泛型——但是Java仍然比Python冗余的多。啟動和運行一個項目需要更多的樣板和開銷——通常這意味更多的工作。

 

  結論

 

  Java擁有一個漫長而傳奇的歷史,其中有好有壞。現在去嘗試使用它,你會發現新的驚喜。

 

  更多Java培訓Java視頻Java教程盡在動力節點Java培訓,關注動力節點官方微信,獲得一手Java全新知識。

 

  

 

上一篇:程序員面試技巧總結
下一篇:作為編程人員你可能常用到的技術網站

開班信息

主站蜘蛛池模板: 中国性xxxxx极品奶水 | 九九精| 四虎在线免费观看 | 亚洲欧洲国产成人综合一本 | 中文字幕三级理论影院 | 夜夜操夜夜摸 | 久久精品国产影库免费看 | 男女啪啪网站 | 高清一区二区三区 | 欧美日韩在线播一区二区三区 | 国产中文字幕在线观看 | 一区二区三区在线 | 色婷婷久久综合中文网站 | 四虎永久地址 | 俺去鲁婷婷六月色综合 | 88国产精品视频一区二区三区 | 99精品久久久久久久婷婷 | 老司机久久精品视频 | 香蕉久久综合精品首页 | 日韩在线看片 | 毛片免费在线观看 | 日韩免费福利视频 | 狠狠色综合久久丁香婷婷 | 日本亚洲欧洲高清有码在线播放 | 国产精品爱久久久久久久 | 好吊妞精品视频 | 亚洲乱码在线观看 | 久久爱www | 成人影院欧美大片免费看 | 欧美在线性爱视频 | 四虎精品福利视频精品 | 国产精品ⅴ视频免费观看 | 亚洲小视频在线观看 | 日韩高清在线日韩大片观看网址 | 婷婷综合 | 天天碰天天操 | 国产丶欧美丶日韩丶不卡影视 | 欧日韩一区二区三区 | 欧美日韩高清 | 人人爽天天爽 | 欧美激情伦妇在线观看 |