精品国产免费观看久久久_久久天天躁狠狠躁夜夜爽_无码人妻少妇久久中文字幕_狠狠做深爱婷婷久久综合一区

網(wǎng)絡(luò)建站知識

精準(zhǔn)傳達(dá) ? 價值共享

洞悉互聯(lián)網(wǎng)前沿資訊,探尋網(wǎng)站營銷規(guī)律

為什么用 Java:讓程序員告訴你

作者:Smileby陌少羽 | 2017-06-16 08:15 |點擊:

每當(dāng)我告訴別人我一直在用Java工作時,大家的反應(yīng)都是:

“納尼!Java?為啥是Java?”

說實話,本人剛開始的時候也是同樣的反應(yīng)。但是由于Java的類型安全,執(zhí)行性能和堅如磐石的工具,我漸漸地開始欣賞Java。同時我注意到,現(xiàn)在的Java已今非昔比——它在過去的10年間穩(wěn)健地改善著。

緣何是Java?

假 設(shè)每天都用Java的想法還沒有讓君惡心到食不下咽,我在此重申Java已非你所了解的“吳下阿蒙”了。當(dāng)Python, Ruby, 和Javascript在“動態(tài)類型語言革命”™(我自己造的名詞)中大放異彩時,Java已經(jīng)悄悄地借鑒了動態(tài)語言和函數(shù)式語言的很多吸引人的特性,同 時保留了讓Java和JVM晉級一流開發(fā)環(huán)境的先賢的努力成果。憑借大約9百萬Java攻城獅的基層群體,Java仍然是世界上最受歡迎的編程語言。我們 不能僅僅因為Java的語法有一點點繁瑣,就抹殺掉它所有的歷史和開發(fā)工作。但是流行不等同于正確。下面我們就來看看是什么讓Java如此大放異彩。

Java虛擬機(JVM)

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

庫的支持

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

類型安全

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

并發(fā)性

下面這條tweet總結(jié)了大多數(shù)動態(tài)語言的并行狀態(tài):

Most JS/Python/Ruby apps… pic.twitter.com/hkDkjdxpFH

— Reuben Bond (@reubenbond)

Java 卻有著對多線程和并行的一流支持。對于Java 1.7, 許并行的immutable數(shù)據(jù)結(jié)構(gòu)令你輕松地在線程間共享數(shù)據(jù)。Akka庫更進(jìn)一步的提供了Erlang型的Actors來寫并發(fā)和分布式的程序。我并 不是在說Java比Go具有更好的并行支持,但是可以管理單個線程這一特性為Java應(yīng)用提供了異步性能;而Python是做不到這點的。

用最新的Java來編程

現(xiàn)在你的心情可能已經(jīng)從惡心變成好奇了,那么我們在2015年該如何寫Java呢?從哪兒開始呢?首先,讓我們回顧一些在Java 7和Java 8涌現(xiàn)的核心語言概念。

迭代

首先我們一起來看看迭代。下面是Java 8中的 for循環(huán):

List<String> names = new LinkedList<>();  // compiler determines type of LinkedList

// ... add some names to the collection

names.forEach(name -> System.out.println(name));

或者是被大大簡化的 for關(guān)鍵詞?

for (String name : names)

System.out.println(name);

這2種循環(huán)結(jié)構(gòu)都比你平時看到的for循環(huán)簡潔的多。

Lambda函數(shù)

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

下面來看幾個Java中Lambda函數(shù)的例子。

// Lambda Runnable
Runnable r2 = () -> System.out.println("Hello world two!");

// Lambda Sorting
Collections.sort(personList, (Person p1, Person p2) -> p1.getSurName().compareTo(p2.getSurName()))

// Lambda Listener
testButton.addActionListener(e -> System.out.println("Click Detected by Lambda Listener"));

這里無法詳細(xì)展開Lambda函數(shù)這個話題——http://www.drdobbs.com/jvm/lambda-expressions-in-java-8/240166764文章提供了一個很好的切入點來更多地了解Lambda函數(shù)。

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

List<String> names = new LinkedList<>();
// ... add some names to the collection
long count = 0;
for (String name : names)  {
if (name.startsWith("A"))
++count;
}

如果用流,上述就可以簡化為首先將集合轉(zhuǎn)換成流,然后使用函數(shù):

List<String> names = new LinkedList<>();
// ... add some names to the collection
long count = names.stream()
.filter(name -> name.startsWith("A"))
.count();

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

 Try-With-Resources結(jié)構(gòu)

在Java 6之前,打開一個文件然后讀取內(nèi)容需要通過try/finally來完成:

static String readFirstLineFromFileWithFinallyBlock(String path)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}

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

Java 7引入了 Try-With-Resources結(jié)構(gòu)來克服這種缺陷:

static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}

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

多重catch

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

catch (IOException ex) {
logger.log(ex);
throw ex;
catch (SQLException ex) {
logger.log(ex);
throw ex;
}

從Java 7開始,你可以在一個代碼塊內(nèi)捕捉多個異常,從而減少了代碼冗余:

catch (IOException|SQLException ex) {
logger.log(ex);
throw ex;
}

數(shù)值字面常量(Numeric Literals)

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

int thousand = 1_000;
int million  = 1_000_000;

使用Java

看到現(xiàn)代Java的語法如何簡化并擴展了老Java之后,你可能已經(jīng)摩拳擦掌躍躍欲試Java了。我整理了一下第三方的工具和庫,這些可以用來幫助你們上手。

Maven

Maven是一個Java構(gòu)建系統(tǒng),相比于配置,它更重視規(guī)范。Maven定義了應(yīng)用程序的結(jié)構(gòu),并提供了許多內(nèi)置函數(shù),比如運行測試,打包應(yīng)用,部署你的庫。使用Maven會顯著降低管理Java項目的認(rèn)知開銷。 Maven Central是Java世界中的PyPI,為已發(fā)布的Java庫提供一站式服務(wù)。

核心函數(shù)

谷歌的Guava library提供了谷歌Java開發(fā)中所使用的核心函數(shù)。這包括應(yīng)用于集合,緩存,基礎(chǔ)數(shù)據(jù)類型,并發(fā),字符串處理工作,I/O等的常見函數(shù)。Guava為如何設(shè)計好的的Java API提供了絕佳的案例分析,提供最有效的從Java中推薦的最佳實踐的具體例子一個很好的案例, Effective Java中推薦的最佳實踐大部分都在Guava中得以體現(xiàn)。Guava被用于谷歌產(chǎn)品開發(fā),進(jìn)行了超過286,000個單元測試,可謂經(jīng)受過實戰(zhàn)測試的考驗。

日期/時間函數(shù)

Joda-Time 已 經(jīng)成為Java實際上的標(biāo)準(zhǔn)日期/時間函數(shù)庫。事實上,Java 8幾乎一字不差地采用了Joda-Time規(guī)范。自此,我們建議使用java.time中的日期/時間函數(shù)代替Joda-Time。但是,如果你需要使用 Java 8之前的版本,Joda-Time提供了無與倫比的API。

分布式系統(tǒng)

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

Web應(yīng)用程序

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

單元測試

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

模擬框架(Mocking Framework)

Mockito是Java的標(biāo)準(zhǔn)模擬庫。它提供了所有你能想到的且對編寫測試非常重要的模擬庫的功能。

然而不足的是。。。

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

它還是Java!

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

JSON

Java缺少映射到JSON的object literal syntax(如Python的字典literal syntax)。正因如此,從Java對象映射到JSON有時需要繁復(fù)的對象實例化和映射,反之亦然。目前有各種JSON庫在這個領(lǐng)域競爭,Jackson是當(dāng)前的最受歡迎的,但是Jackson的文檔需要進(jìn)一步完善。

模擬(Mocking)

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

REPL

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

語法累贅

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

結(jié)論

Java擁有一個漫長而傳奇的歷史,其中有好有壞。如果你已經(jīng)很多年沒有使用Java工作了,也許現(xiàn)在是一個好機會再次嘗試它。只要不是像下面這樣做:

 

如沒特殊注明,文章均為狐靈科技原創(chuàng),轉(zhuǎn)載請注明?? "為什么用 Java:讓程序員告訴你
多一份免費策劃方案,總有益處。

請直接添加技術(shù)總監(jiān)微信聯(lián)系咨詢

網(wǎng)站設(shè)計 品牌營銷

多一份參考,總有益處

聯(lián)系狐靈科技,免費獲得專屬《策劃方案》及報價

咨詢相關(guān)問題或預(yù)約面談,可以通過以下方式與我們聯(lián)系

業(yè)務(wù)熱線:15082661954 / 大客戶專線:15523356218

人妻人人做人碰人人添青青| 少妇精品久久久一区二区三区 | 全部孕妇毛片丰满孕妇孕交| 国产精产国品一二三产区区别| 亚洲乱码精品久久久久| 欧美牲交黑粗硬大在线视频| 国产偷窥熟女精品视频| BGMBGM浓毛老太太| 亚洲AV无码国产精品色午友情链 | 无码人妻熟妇AV又粗又大| 麻豆AV字幕无码中文| 国产精华液一线二线三线| 中文字幕在线观看亚洲日韩| 性无码免费一区二区三区在线 | 天堂AV无码AV一区二区三区| 久久久精品人妻人人澡| 国产 亚洲 无码 激情| 中国VODAFONEWIFI粗| 午夜性色一区二区三区不卡视频| 女性高爱潮免费有声视频网站| 国内情侣作爱视频网站| 成人毛片亚洲高潮无码精品色| 亚洲一线产区二线产区区| 为什么穿裙子方便打野| 欧美性大战XXXXX| 久久精品人人爽人人爽| 国产精品久久久久久超碰| OM老熟女HDXⅩXXX69| 亚洲美女又黄又爽在线观看 | 中国农村真实BBWBBWBBW| 性色AV一区二区三区无码| 人妻少妇波多野结衣黑人| 久久国产精品久久精品国产| 国产激情无码一区二区| xxxxxx日本黄色| 与子乱刺激对白在线播放| 亚洲AV午夜成人影院老师机影院 | 男男黄Gay片免费网站www| 黄动漫车车好快的车车哔哩哔哩| 公玩弄年轻人妻HD| JAPANESE老熟妇乱子伦视| 野外做受又硬又粗又大视频√| 午在线亚洲男人午在线| 少妇BBW搡BBBB搡| 欧美伊人色综合久久天天| 理论片午午伦夜理片1| 好男人资源在线WWW免费| 国产成人亚洲综合无码18禁禁| YSL千人千色T9T9T9T| 中文字幕成人精品久久不卡| 亚洲欧美色中文字幕在线| 亚洲 欧美 中文 日韩AⅤ| 特级毛片爽WWW免费版| 日本JAPANESE 30成熟| 欧美AⅤ精品一区二区三区| 久久亚洲精品成人无码网站| 精品爆乳一区二区三区无码AV| 国产免费无遮挡吸奶头视频| 国产SUV精品一区二区88L| 赤裸羔羊Ⅲ致命快感 电影| 宝贝腿抬高点让我爽一点麻豆| 99久久婷婷国产综合精品| 做AJ的姿势教程大全图| 又黑又肥的60岁岳| 夜夜未满十八勿进的爽爽影院| 亚洲另类无码专区偷拍| 亚洲国产AV玩弄放荡人妇系列 | 熟妇av一区二区| 日韩一区二区在线视频| 日本少妇毛茸茸高潮| 欧洲熟妇色XXXXX视频| 欧美日韩一区二区三区人妻| 欧美丰满熟妇人妻兽交视频| 男人J进女人屁网站免费| 美女床上喷水在线观看| 蜜桃AV蜜臀AV色欲AV麻| 免费看撕开奶罩揉吮奶头视频 | 久久精品国产亚洲77777| 精品国产一区二区三区免费 | 韩国电影办公室的在线观看| 国产三级精品三级在线专区1| 国产精品xxxxav| 国产男男Gay做受ⅩXX高潮| 国产精品视频YJIZZ| 国产乱人伦偷精品视频免下载| 国产精品无码MV在线观看| 国产三级多多影院| 含着她的花蒂啃咬高潮| 精品乱人伦一区二区三区| 久久久久国色AV免费观看性色| 久久亚洲精品无码AV| 男女超爽视频免费播放| 欧亚精品卡一卡二卡三7174| 日本欧美午夜成人免费观看| 色综合亚洲一区二区小说性色AⅤ| 丝瓜成视频人APP下载网站| 无码AV免费一区二区三区四区 | 熟女人妇 成熟妇女系列视频| 天天噜日日噜狠狠噜免费| 无码无遮挡又大又爽又黄的视频| 性色av无码人妻少妇肥臀| 亚洲风情亚Aⅴ在线发布| 亚洲午夜国产精品无码| 中文字幕丰满伦子无码| JIZZ在线观看中国少妇| 大陆国语对白国产AV片| 国产精品欧美一区二区三区不卡| 国产自偷在线拍精品热| 久久精品第九区免费观看| 麻豆一区区三区四区产品麻豆| 欧美性色欧美A在线播放| 三个医生换着躁我一个| 小浪货腿张开水好多呀H| 亚洲区激情区无码区| 2021久久精品国产99国产精| 成人毛片18女人毛片免费看快色| 国产高潮流白浆喷水在线观看| 国产中文成人精品久久久| 久久久久久精品免费免费R| 女人夜夜春高潮爽A∨片 | 欧美精品中文字幕亚洲专区| 日韩免费A级毛片无码A∨| 午夜天堂精品久久久久| 亚洲午夜无码片在线观看影院| 97成人无码免费一区二区中文 | 老司机带带我免费看| 奇米影视7777狠狠狠狠影视| 玩爽少妇人妻系列无码| 亚洲日韩精品无码专区加勒比海| 69成人免费视频无码专区| 公交车上穿短裙被狂C| 极品少妇的粉嫩小泬看片| 男男野战爆了我的菊BL| 丝袜美女人体艺术| 亚洲日韩精品A∨片无码加勒比| A级毛片无码久久精品免费| 国产ZLJZLJZLJZLJ| 久久精品国产亚洲不AV麻豆| 人妻aⅴ无码一区二区色戒| 性少妇SEXVIDEOS高清| 中文在线天堂А√在线| 国产AV午夜精品一区二区入口| 久久国产AVJUST麻豆| 日本三级在线播放线观看视频| 亚洲AV色香蕉一区二区三区夜夜嗨| 在线观看特色大片免费网站 | PORNO日本╳╳╳| 国产欧美亚洲日韩图片| 免费A级毛片无码A∨蜜芽试看| 色偷偷人人澡久久超碰97| 亚洲人成色77777在线观看| 被学长抱进小树林C个爽| 国内精品伊人久久久久妇| 欧美丰满少妇XXXXX| 性色av无码人妻少妇肥臀| 97人妻无码一区二区精品免费| 国产精品成人AV片免费看| 鲁大师在线影院免费观看| 少妇短裙公车被直接进入| 亚洲一区二区三区自拍公司| 成人午夜精品无码区| 精品无码中文字幕不卡| 日韩AV无码一区二区三区不卡毛 | 国产成人精品免费久久久久| 久久青草亚洲AV无码麻豆| 色多多性虎精品无码AV| 亚洲综合色在线观看一区二区| 大香伊蕉在人线国产69| 久久久无码精品国产一区| 四虎精品成人免费视频| 中文字幕日本人妻久久久免费| 国产猛男GAY1069视频| 欧美牲交视频免费观看| 亚洲精品无码午夜福利理论片| 成年网站未满十八禁在线观看| 久久99精品久久久久久齐齐| 色婷婷亚洲一区二区综合| 玉蒲团Ⅲ艳乳欲仙欲| 国产啪亚洲国产精品无码| 欧洲美熟女乱又伦AV曰曰| 亚洲人成在线观看无码| 国产超碰人人做人人爽AV大片 | 他的舌头含有起了我的小豆豆| 伊人天堂Av无码Av日韩Av| 国产精品亚韩精品无码A在线| 欧美性猛交XXXX乱大交丰满| 亚洲日本乱码在线观看 | 99久RE热视频这只有精品6| 国内精品自线一区二区三区2| 日韩欧美亚洲综合久久影院DS | 精品国产一区二区三区麻豆| 色先锋AV资源中文字幕| 337P日本大胆欧洲色噜噜| 回民丰满少妇XXX性| 熟女人妇 成熟妇女系列视频| 99久在线国内在线播放免费观看| 精品少妇无码一区二区三批| 无码国产精成人午夜视频不卡| 草草浮力地址线路①屁屁影院| 免费无码午夜福利片69|