java基礎(chǔ)之java11

一、本地變量類型推斷

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


var javastack = "javastack";

System.out.println(javastack);

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


var javastack = "javastack";

就等于:

String javastack = "javastack";


二赚瘦、字符串加強(qiáng)

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


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

" ".isBlank(); // true

//去除首尾空格

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

//去除尾部空格

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

//去除首部空格

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

//復(fù)制字符串

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

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

"A\nB\nC".lines().count(); // 3


三起意、集合加強(qiáng)

自Java 9開始,Jdk 里面為集合(List/ Set/ Map)都添加了 of 和 copyOf 方法病瞳,它們兩個都用來創(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<String>();

var copy = List.copyOf(list);

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

示例1和2代碼差不多套菜,為什么一個為true,一個為false?


來看下它們的源碼:

static <E> List<E> 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 <E> List<E> copyOf(Collection<? extends E> coll) {

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

}

static <E> List<E> listCopy(Collection<? extends E> coll) {

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

????????return (List<E>)coll;

????} else {

????????return (List<E>)List.of(coll.toArray());

????}

}

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

示例2因為用的 new 創(chuàng)建的集合戏溺,不屬于不可變 AbstractImmutableList 類的子類渣蜗,所以 copyOf 方法又創(chuàng)建了一個新的實(shí)例,所以為false.

注意:使用of和copyOf創(chuàng)建的集合為不可變集合旷祸,不能進(jìn)行添加耕拷、刪除、替換托享、排序等操作骚烧,不然會報 java.lang.UnsupportedOperationException 異常控淡。

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


四掺炭、Stream 加強(qiáng)

Stream是 Java 8 中的新特性,Java 9 開始對 Stream 增加了以下 4 個新方法凭戴。

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

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

2)增加 takeWhile 和 dropWhile 方法

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

.takeWhile(n -> n < 3)

.collect(Collectors.toList()); // [1, 2]

從開始計算,當(dāng)n < 3時就截止么夫。

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

.dropWhile(n -> n < 3)

.collect(Collectors.toList()); // [3, 2, 1]

這個和上面的相反者冤,一旦n < 3不成立就開始計算。

3)iterate重載

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

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


五愿汰、Optional 加強(qiáng)

Opthonal也增加了幾個非常酷的方法乐纸,現(xiàn)在可以很方便的將一個 Optional 轉(zhuǎn)換成一個 Stream, 或者當(dāng)一個空 Optional 時給它一個替代的衬廷。

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

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

Optional.ofNullable(null)

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

.get(); // javastack


六、InputStream 加強(qiáng)

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


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);

}


七跌宛、HTTP Client API

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

來看一下HTTP Client的用法:

var request = HttpRequest.newBuilder()

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

.GET()

.build();

var client = HttpClient.newHttpClient();

//同步

HttpResponse<String> 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)請求方式為 Get入问!


更多使用示例可以看這個API丹锹,后續(xù)有機(jī)會再做演示稀颁。

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


八匾灶、化繁為簡,一個命令編譯運(yùn)行源代碼

看下面的代碼租漂。

//編譯

javac Javastack.java

//運(yùn)行

java Javastack


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

java Javastack.java


參考文檔

https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-11/index.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸟赫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子消别,更是在濱河造成了極大的恐慌抛蚤,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寻狂,死亡現(xiàn)場離奇詭異岁经,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蛇券,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門缀壤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纠亚,你說我怎么就攤上這事诉位。” “怎么了菜枷?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵苍糠,是天一觀的道長。 經(jīng)常有香客問我啤誊,道長岳瞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任蚊锹,我火速辦了婚禮瞳筏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牡昆。我一直安慰自己姚炕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布丢烘。 她就那樣靜靜地躺著柱宦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪播瞳。 梳的紋絲不亂的頭發(fā)上掸刊,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音赢乓,去河邊找鬼忧侧。 笑死石窑,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚓炬。 我是一名探鬼主播松逊,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肯夏!你這毒婦竟也來了棺棵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤熄捍,失蹤者是張志新(化名)和其女友劉穎烛恤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體余耽,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缚柏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碟贾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片币喧。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖袱耽,靈堂內(nèi)的尸體忽然破棺而出杀餐,到底是詐尸還是另有隱情,我是刑警寧澤朱巨,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布史翘,位于F島的核電站,受9級特大地震影響冀续,放射性物質(zhì)發(fā)生泄漏琼讽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一洪唐、第九天 我趴在偏房一處隱蔽的房頂上張望钻蹬。 院中可真熱鬧,春花似錦凭需、人聲如沸问欠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顺献。三九已至,卻和暖如春薪伏,著一層夾襖步出監(jiān)牢的瞬間滚澜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工嫁怀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留设捐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓塘淑,卻偏偏與公主長得像萝招,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子存捺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容