国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java 11正式發(fā)布,這幾個(gè)逆天新特性教你寫出更牛逼的代碼

garfileo / 3337人閱讀

摘要:就在前段時(shí)間,官方宣布正式發(fā)布,可在生產(chǎn)環(huán)境中使用這無(wú)疑對(duì)我們來說是一大好的消息。途中列舉了的正式發(fā)布時(shí)間以及支持計(jì)劃。長(zhǎng)期支持,表示會(huì)對(duì)其做長(zhǎng)期的補(bǔ)丁安全等擴(kuò)展支持等。

就在前段時(shí)間,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發(fā)布,可在生產(chǎn)環(huán)境中使用! 這無(wú)疑對(duì)我們來說是一大好的消息。作為一名java開發(fā)者來說,雖然又要去學(xué)習(xí)和了解java11,但內(nèi)心還是欣慰的。我想至少你和我一樣的心情:Java在手,天下我有!

今天我們來看一下Java 11到底是什么、他有什么特別的、到底要不要升級(jí)到Java 11。

Java 11有什么特別的

在Oracle官網(wǎng)中,進(jìn)入下載頁(yè)面,第一個(gè)可供下載的JDK版本已經(jīng)提換成了Java SE 11 (LTS),這里的LTS表示Long-Term-Support。

本次發(fā)布的Java 11和2017年9月份發(fā)布的Java 9以及 2018年3月份發(fā)布的Java 10相比,其最大的區(qū)別就是:在長(zhǎng)期支持(Long-Term-Support)方面,Oracle表示會(huì)對(duì)Java 11提供大力支持,這一支持將會(huì)持續(xù)至2026年9月。這是據(jù) Java 8 以后支持的首個(gè)長(zhǎng)期版本。

為什么說是長(zhǎng)期版本,看下面的官方發(fā)布的支持路線圖表。

上圖是一張Oracle 公布的對(duì)于各個(gè)版本的JDK的Support Roadmap。途中列舉了Java 6 - Java 12的正式發(fā)布時(shí)間以及支持計(jì)劃。

從中可以看出,在Java 11之前,Java 9和Java 10是不提供長(zhǎng)期支持的,而上一個(gè)提供長(zhǎng)期支持的版本是Java 8,其將會(huì)支持到2025年3月。

長(zhǎng)期支持,表示Oracle會(huì)對(duì)其做長(zhǎng)期的補(bǔ)丁、安全等擴(kuò)展支持等。

下一個(gè)提供長(zhǎng)期支持的版本將會(huì)是Java 17,其將于2021年發(fā)布。

現(xiàn)在大部分都在用 Java 8,Java 9 和 10 目前很少有人在用,至少我沒有發(fā)現(xiàn)有公司在生產(chǎn)環(huán)境應(yīng)用的,那就是找死。

現(xiàn)在 Java 11 長(zhǎng)期支持,也已經(jīng)包含了 9 和 10 的全部功能,9 和 10 自然就活到頭了。。

那么我們來看下 從 Java 9 - 11 都有哪些重要的新特性呢?

新特性

1、本地變量類型推斷

什么是局部變量類型推斷?

var?javastack?=?"javastack";??
System.out.println(javastack);?

大家看出來了,局部變量類型推斷就是左邊的類型直接使用 var 定義,而不用寫具體的類型,編譯器能根據(jù)右邊的表達(dá)式自動(dòng)推斷類型,如上面的 String 。

var?javastack?=?"javastack";?

就等于:

String?javastack?=?"javastack";?

2、字符串加強(qiáng)

Java 11 增加了一系列的字符串處理方法,如以下所示。

//?判斷字符串是否為空白??

"?".isBlank();????????????????//?true??

//?去除首尾空格??

"?Javastack?".strip();??????????//?"Javastack"??

//?去除尾部空格???

"?Javastack?".stripTrailing();??//?"?Javastack"??

//?去除首部空格???

"?Javastack?".stripLeading();???//?"Javastack?"??

//?復(fù)制字符串??

"Java".repeat(3);?????????????//?"JavaJavaJava"??

//?行數(shù)統(tǒng)計(jì)??

"A
B
C".lines().count();????//?3?

3、集合加強(qiáng)

自 Java 9 開始,Jdk 里面為集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它們兩個(gè)都用來創(chuàng)建不可變的集合,來看下它們的使用和區(qū)別。

示例1:

var?list?=?List.of("Java",?"Python",?"C");??

var?copy?=?List.copyOf(list);??

System.out.println(list?==?copy);???//?true?

示例2:

var?list?=?new?ArrayList();??

var?copy?=?List.copyOf(list);??

System.out.println(list?==?copy);???//?false?

示例1和2代碼差不多,為什么一個(gè)為true,一個(gè)為false?

來看下它們的源碼:

static??List?of(E...?elements)?{??

????switch?(elements.length)?{?//?implicit?null?check?of?elements??

????????case?0:??

????????????return?ImmutableCollections.emptyList();??

????????case?1:??

????????????return?new?ImmutableCollections.List12<>(elements[0]);??

????????case?2:??

????????????return?new?ImmutableCollections.List12<>(elements[0],?elements[1]);??

????????default:??

????????????return?new?ImmutableCollections.ListN<>(elements);??

????}??

}??

static??List?copyOf(Collection?coll)?{??

????return?ImmutableCollections.listCopy(coll);??

}??

static??List?listCopy(Collection?coll)?{??

????if?(coll?instanceof?AbstractImmutableList?&&?coll.getClass()?!=?SubList.class)?{??

????????return?(List)coll;??

????}?else?{??

????????return?(List)List.of(coll.toArray());??

????}??

}?

可以看出 copyOf 方法會(huì)先判斷來源集合是不是 AbstractImmutableList 類型的,如果是,就直接返回,如果不是,則調(diào)用 of 創(chuàng)建一個(gè)新的集合。

示例2因?yàn)橛玫?new 創(chuàng)建的集合,不屬于不可變 AbstractImmutableList 類的子類,所以 copyOf 方法又創(chuàng)建了一個(gè)新的實(shí)例,所以為false.

注意:使用?of?和?copyOf?創(chuàng)建的集合為不可變集合,不能進(jìn)行添加、刪除、替換、排序等操作,不然會(huì)報(bào)?java.lang.UnsupportedOperationException?異常。?

上面演示了 List 的 of 和 copyOf 方法,Set 和 Map 接口都有。

4、Stream 加強(qiáng)

Stream 是 Java 8 中的新特性,Java 9 開始對(duì) Stream 增加了以下 4 個(gè)新方法。

1) 增加單個(gè)參數(shù)構(gòu)造方法,可為null

Stream.ofNullable(null).count();?//?0?

2) 增加 takeWhile 和 dropWhile 方法

Stream.of(1,?2,?3,?2,?1)??

????.takeWhile(n?->?n?

從開始計(jì)算,當(dāng) n < 3 時(shí)就截止。

Stream.of(1,?2,?3,?2,?1)??

????.dropWhile(n?->?n?

這個(gè)和上面的相反,一旦 n < 3 不成立就開始計(jì)算。

3)iterate重載

這個(gè) iterate 方法的新重載方法,可以讓你提供一個(gè) Predicate (判斷條件)來指定什么時(shí)候結(jié)束迭代。

如果你對(duì) JDK 8 中的 Stream 還不熟悉,可以看之前分享的這一系列教程。

5、Optional 加強(qiáng)

Opthonal 也增加了幾個(gè)非??岬姆椒?,現(xiàn)在可以很方便的將一個(gè) Optional 轉(zhuǎn)換成一個(gè) Stream, 或者當(dāng)一個(gè)空 Optional 時(shí)給它一個(gè)替代的。

Optional.of("javastack").orElseThrow();?????//?javastack??

Optional.of("javastack").stream().count();??//?1??

Optional.ofNullable(null)??

????.or(()?->?Optional.of("javastack"))??

????.get();???//?javastack?

6、InputStream 加強(qiáng)

InputStream 終于有了一個(gè)非常有用的方法:transferTo,可以用來將數(shù)據(jù)直接傳輸?shù)?OutputStream,這是在處理原始數(shù)據(jù)流時(shí)非常常見的一種用法,如下示例。

var?classLoader?=?ClassLoader.getSystemClassLoader();??

var?inputStream?=?classLoader.getResourceAsStream("javastack.txt");??

var?javastack?=?File.createTempFile("javastack2",?"txt");??

try?(var?outputStream?=?new?FileOutputStream(javastack))?{??

????inputStream.transferTo(outputStream);??

}?

7、HTTP Client API

這是 Java 9 開始引入的一個(gè)處理 HTTP 請(qǐng)求的的孵化 HTTP Client API,該 API 支持同步和異步,而在 Java 11 中已經(jīng)為正式可用狀態(tài),你可以在 java.net 包中找到這個(gè) API。

來看一下 HTTP Client 的用法:

var?request?=?HttpRequest.newBuilder()??

????.uri(URI.create("https://javastack.cn"))??

????.GET()??

????.build();??

var?client?=?HttpClient.newHttpClient();??

//?同步??

HttpResponse?response?=?client.send(request,?HttpResponse.BodyHandlers.ofString());??

System.out.println(response.body());??

//?異步??

client.sendAsync(request,?HttpResponse.BodyHandlers.ofString())??

????.thenApply(HttpResponse::body)??

????.thenAccept(System.out::println);?

上面的 .GET() 可以省略,默認(rèn)請(qǐng)求方式為 Get!

更多使用示例可以看這個(gè) API,后續(xù)有機(jī)會(huì)再做演示。

現(xiàn)在 Java 自帶了這個(gè) HTTP Client API,我們以后還有必要用 Apache 的 HttpClient 工具包嗎?

8、化繁為簡(jiǎn),一個(gè)命令編譯運(yùn)行源代碼

看下面的代碼。

//?編譯??
javac?Javastack.java??


//?運(yùn)行??
java?Javastack?

在我們的認(rèn)知里面,要運(yùn)行一個(gè) Java 源代碼必須先編譯,再運(yùn)行,兩步執(zhí)行動(dòng)作。而在未來的 Java 11 版本中,通過一個(gè) java 命令就直接搞定了,如以下所示。

java?Javastack.java?

更多新特性

新發(fā)布的Java 11在新特性方面,提供了17個(gè)JEP(JDK Enhancement Proposal 特性增強(qiáng)提議)

上圖是Oracle公布的Java 11包含的所有新特性,其中幾個(gè)重點(diǎn)的新特性為:

ZGC:可擴(kuò)展的低延遲垃圾收集器

ZGC是一款號(hào)稱可以保證每次GC的停頓時(shí)間不超過10MS的垃圾回收器,并且和當(dāng)前的默認(rèn)垃圾回收起G1相比,吞吐量下降不超過15%。

Epsilon:什么事也不做的垃圾回收器

Java 11還加入了一個(gè)比較特殊的垃圾回收器——Epsilon,該垃圾收集器被稱為“no-op”收集器,將處理內(nèi)存分配而不實(shí)施任何實(shí)際的內(nèi)存回收機(jī)制。 也就是說,這是一款不做垃圾回收的垃圾回收器。這個(gè)垃圾回收器看起來并沒什么用,主要可以用來進(jìn)行性能測(cè)試、內(nèi)存壓力測(cè)試等,Epsilon GC可以作為度量其他垃圾回收器性能的對(duì)照組。大神Martijn說,Epsilon GC至少能夠幫助理解GC的接口,有助于成就一個(gè)更加模塊化的JVM。

增強(qiáng)var用法

Java 10中增加了本地變量類型推斷的特性,可以使用var來定義局部變量。盡管這一特性被很多人詬病,但是并不影響Java繼續(xù)增強(qiáng)他的用法,在Java 11中,var可以用來作為L(zhǎng)ambda表達(dá)式的局部變量聲明。

移除Java EE和CORBA模塊

早在發(fā)布Java SE 9的時(shí)候,Java就表示過,會(huì)在未來版本中將Java EE和CORBA模塊移除,而這樣舉動(dòng)終于在Java 11中實(shí)施。終于去除了Java EE和CORBA模塊。

HTTP客戶端進(jìn)一步升級(jí)

JDK 9 中就已對(duì) HTTP Client API 進(jìn)行標(biāo)準(zhǔn)化,然后通過JEP 110,在 JDK 10 中進(jìn)行了更新。在本次的Java 11的更新列表中,由以JEP 321進(jìn)行進(jìn)一步升級(jí)。該API通過CompleteableFutures提供非阻塞請(qǐng)求和響應(yīng)語(yǔ)義,可以聯(lián)合使用以觸發(fā)相應(yīng)的動(dòng)作。 JDK 11完全重寫了該功能?,F(xiàn)在,在用戶層請(qǐng)求發(fā)布者和響應(yīng)發(fā)布者與底層套接字之間追蹤數(shù)據(jù)流更容易了,這降低了復(fù)雜性,并最大程度上提高了HTTP / 1和HTTP / 2之間的重用的可能性。

到底要不要升級(jí)

2017年8月,JCP執(zhí)行委員會(huì)提出將Java的發(fā)布頻率改為每六個(gè)月一次。

2017年9月,Java 9發(fā)布。

2018年3月,Java 10發(fā)布。

2018年9月,Java 11發(fā)布。

大部分人使用的JDK版本還是Java 8及以下版本,甚至某些公司的生產(chǎn)環(huán)境使用的還是JDK 1.6。

那么,對(duì)于公司和開發(fā)者來說,到底要不要在生產(chǎn)及開發(fā)環(huán)境中升級(jí)和學(xué)習(xí)Java 11呢?

對(duì)于企業(yè)來說

對(duì)于企業(yè)來說,生產(chǎn)環(huán)境中的JDK版本升級(jí)到Java 11還是有必要的。主要有兩個(gè)原因:

1、Oracle會(huì)對(duì)Java 11提供長(zhǎng)期支持,企業(yè)可以放心使用這一版本。并且下一個(gè)長(zhǎng)期支持的版本會(huì)在三年后發(fā)布,時(shí)間比較久遠(yuǎn)。

2、Java 11確實(shí)提供了一些比較不錯(cuò)的特性,尤其重要的是提供了ZGC,這是一款具有劃時(shí)代意義的垃圾回收器。優(yōu)點(diǎn)不再贅述。有了ZGC,JVM的性能瓶頸可以被突破。

對(duì)于開發(fā)者來說

在編碼方面,Java 11并沒有像Java 8那樣變化巨大,畢竟Java 8提供了函數(shù)式編程的能力,這也是很多開發(fā)者學(xué)習(xí)Java 8的一個(gè)重要原因。

但是,Java 11也并不是完全沒有提升,至少在新版本中,Java開發(fā)者終于可以擺脫老舊的HttpURLConnection了。新的HTTP API提供了對(duì)HTTOP/2等業(yè)界前沿標(biāo)準(zhǔn)的支持,提供了精簡(jiǎn)而又友好的API接口。

所以,綜上所述,無(wú)論是對(duì)于企業(yè)還是開發(fā)者來說,升級(jí)Java 11都是有必要的,至少比Java 9和Java 10的必要性要大很多。至于這個(gè)必要性到底有多大呢,作者給一個(gè)簡(jiǎn)單的說明:

如果你現(xiàn)在時(shí)候用的JDK/Java版本低于Java 8,先升級(jí)到Java 8。

如果你現(xiàn)在時(shí)候用的JDK/Java版本高于Java 7,那么可以考慮升級(jí)到Java 11了。

當(dāng)然,你可以直接從Java 6跳躍到Java 11。

#### 最后

現(xiàn)在許多人還在使用 Java 8 或者 7,不過 8 在 2019 年初就會(huì)結(jié)束免費(fèi)更新。現(xiàn)在 11 是長(zhǎng)期支持版本,正是學(xué)習(xí)和上手 11 的好時(shí)機(jī),寫這篇文章希望能對(duì)你有所啟發(fā)。

閱讀更多

還有這種操作?淺析為什么要看源碼

上次發(fā)版我就改了一行代碼!

MongoDB、Hbase、Redis等NoSQL優(yōu)劣勢(shì)、應(yīng)用場(chǎng)景

31道Android面試題 ,牢固你的基礎(chǔ)!

相信自己,沒有做不到的,只有想不到的

在這里獲得的不僅僅是技術(shù)!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/71868.html

相關(guān)文章

  • Java 11 正式發(fā)布,這 8 個(gè)逆天新特性教你寫出更牛逼的代碼

    摘要:美國(guó)時(shí)間月日,正式發(fā)布了,這是據(jù)以后支持的首個(gè)長(zhǎng)期版本。加強(qiáng)是中的新特性,開始對(duì)增加了以下個(gè)新方法。結(jié)束語(yǔ)現(xiàn)在許多人還在使用或者,不過在年初就會(huì)結(jié)束免費(fèi)更新。 美國(guó)時(shí)間 09 月 25 日,Oralce 正式發(fā)布了 Java 11,這是據(jù) Java 8 以后支持的首個(gè)長(zhǎng)期版本。 為什么說是長(zhǎng)期版本,看下面的官方發(fā)布的支持路線圖表。 showImg(https://segmentfaul...

    AlienZHOU 評(píng)論0 收藏0
  • Java 11發(fā)布,String 還能這樣玩!

    摘要:在文章正式發(fā)布,這個(gè)逆天新特性教你寫出更牛逼的代碼中,我有介紹到的八個(gè)新特性,其中關(guān)于加強(qiáng)部分,我覺得有點(diǎn)意思,這里單獨(dú)再拉出來講。是不是很好在將來肯定有武之地如批量讀取文件內(nèi)容到一個(gè)中,就能很好的識(shí)別行結(jié)束符了。 在文章《Java 11 正式發(fā)布,這 8 個(gè)逆天新特性教你寫出更牛逼的代碼》中,我有介紹到 Java 11 的八個(gè)新特性,其中關(guān)于 String 加強(qiáng)部分,我覺得有點(diǎn)意思,...

    guqiu 評(píng)論0 收藏0
  • 幾個(gè)插件,讓你的 vscode牛逼

    摘要:原文主要是開發(fā)使用到的。只能說炒雞強(qiáng)大,沒有什么可以贅述的了。能夠查出那段代碼是誰(shuí)寫的,方便撕逼。支持多種語(yǔ)言,包括,運(yùn)行執(zhí)行一段任意代碼。代碼片段,比如輸入就能聯(lián)想出針對(duì)的。幫助你更好地編寫注釋。原文:10 Visual Studio Code extensions for Python development 主要是 Python 開發(fā)使用到的。 GIT GitLens — Git su...

    Anleb 評(píng)論0 收藏0
  • 我在北京寫代碼 ,你在哪兒?

    摘要:我是年月日來的北京,至今已有天了用這樣計(jì)算巧合的是到京后,新辦理的兩張銀行卡都是數(shù)字結(jié)尾,從那時(shí)起覺的這個(gè)數(shù)字在北京應(yīng)該和我的運(yùn)勢(shì)相合,以至于后來入職現(xiàn)在公司的日期我都特意選擇了月,想想自己也真是比較搞笑。 我是2014年7月17日來的北京,至今已有941天了(用php這樣計(jì)算:echo (time() - strtotime(2014-7-17)) / 86400;)巧合的是到京后,...

    aervon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<