一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼

Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼

2021-06-01 14:33Java技術棧 Java教程

美國當地時間9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發布,可在生產環境中使用!這是自 Java 8 后的首個長期支持版本

美國時間 09 月 25 日,oralce 正式發布了 java 11,這是據 java 8 以后支持的首個長期版本。非常值得大家的關注,可以通過下面的地址進行下載:

https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

為什么說是長期版本,看下面的官方發布的支持路線圖表。

Java 11 正式發布,這 8 個逆天新特性教你寫出更牛逼的代碼

可以看出 java 8 擴展支持到 2025 年,而 java 11 擴展支持到 2026 年。

現在大部分都在用 java 8,java 9 和 10 目前很少有人在用,至少我沒有發現有公司在生產環境應用的,那就是找死。

現在 java 11 長期支持,也已經包含了 9 和 10 的全部功能,9 和 10 自然就活到頭了。。

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

1、本地變量類型推斷

這個博主已經寫過一篇文章,詳細的介紹了 java 10 帶來的這個新特性。

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

?
1
2
var javastack = "javastack";
system.out.println(javastack);

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

?
1
var javastack = "javastack";

就等于:

?
1
string javastack = "javastack";

更多使用詳情請參考這篇文章《java 10 實戰第 1 篇:局部變量類型推斷》,這里不再重復了。

2、字符串加強

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 判斷字符串是否為空白
" ".isblank();        // true
 
// 去除首尾空格
" javastack ".strip();     // "javastack"
 
// 去除尾部空格
" javastack ".striptrailing(); // " javastack"
 
// 去除首部空格
" javastack ".stripleading();  // "javastack "
 
// 復制字符串
"java".repeat(3);       // "javajavajava"
 
// 行數統計
"a\nb\nc".lines().count();  // 3

3、集合加強

自 java 9 開始,jdk 里面為集合(list/ set/ map)都添加了 of 和 copyof 方法,它們兩個都用來創建不可變的集合,來看下它們的使用和區別。

示例1:

?
1
2
3
var list = list.of("java", "python", "c");
var copy = list.copyof(list);
system.out.println(list == copy);  // true

示例2:

?
1
2
3
var list = new arraylist<string>();
var copy = list.copyof(list);
system.out.println(list == copy);  // false

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

來看下它們的源碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 類型的,如果是,就直接返回,如果不是,則調用 of 創建一個新的集合。

示例2因為用的 new 創建的集合,不屬于不可變 abstractimmutablelist 類的子類,所以 copyof 方法又創建了一個新的實例,所以為false.

注意:使用 of 和 copyof 創建的集合為不可變集合,不能進行添加、刪除、替換、排序等操作,不然會報 java.lang.unsupportedoperationexception 異常。

上面演示了 list 的 of 和 copyof 方法,set 和 map 接口都有。

4、stream 加強

stream 是 java 8 中的新特性,java 9 開始對 stream 增加了以下 4 個新方法。

1) 增加單個參數構造方法,可為null

?
1
stream.ofnullable(null).count(); // 0

2) 增加 takewhile 和 dropwhile 方法

?
1
2
3
stream.of(1, 2, 3, 2, 1)
  .takewhile(n -> n < 3)
  .collect(collectors.tolist()); // [1, 2]

從開始計算,當 n < 3 時就截止。

?
1
2
3
stream.of(1, 2, 3, 2, 1)
  .dropwhile(n -> n < 3)
  .collect(collectors.tolist()); // [3, 2, 1]

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

3)iterate重載

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

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

5、optional 加強

opthonal 也增加了幾個非常酷的方法,現在可以很方便的將一個 optional 轉換成一個 stream, 或者當一個空 optional 時給它一個替代的。

?
1
2
3
4
5
optional.of("javastack").orelsethrow();   // javastack
optional.of("javastack").stream().count(); // 1
optional.ofnullable(null)
  .or(() -> optional.of("javastack"))
  .get();  // javastack

6、inputstream 加強

inputstream 終于有了一個非常有用的方法:transferto,可以用來將數據直接傳輸到 outputstream,這是在處理原始數據流時非常常見的一種用法,如下示例。

?
1
2
3
4
5
6
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 開始引入的一個處理 http 請求的的孵化 http client api,該 api 支持同步和異步,而在 java 11 中已經為正式可用狀態,你可以在 java.net 包中找到這個 api。

來看一下 http client 的用法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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() 可以省略,默認請求方式為 get!

更多使用示例可以看這個 api,后續有機會再做演示。

現在 java 自帶了這個 http client api,我們以后還有必要用 apache 的 httpclient 工具包嗎?

8、化繁為簡,一個命令編譯運行源代碼

看下面的代碼。

?
1
2
3
4
5
// 編譯
javac javastack.java
 
// 運行
java javastack

在我們的認知里面,要運行一個 java 源代碼必須先編譯,再運行,兩步執行動作。而在未來的 java 11 版本中,通過一個 java 命令就直接搞定了,如以下所示。

java javastack.java

更多新特性

•flow api for reactive programming
•java module system
•application class data sharing
•dynamic class-file constants
•java repl (jshell)
•flight recorder
•unicode 10
•g1: full parallel garbage collector
•zgc: scalable low-latency garbage collector
•epsilon: no-op garbage collector
•deprecate the nashorn javascript engine
•...

歷史新特性文章

•java 11 要來了,編譯運行一個命令搞定
•jdk 11 發布計劃來了,已確定 3個 新特性
•java 10 實戰第 1 篇:局部變量類型推斷
•jdk 5 ~ 10 新特性傾情整理
•jdk 10 的 10 個新特性
•jdk 10 最重要的 5 個新特性
•jdk 9 的 9 個新特性
•jdk 9 新特性實戰:簡化流關閉新姿勢
•jdk 8 的排序大法
•jdk 8 新特性之 lambda 表達式
•jdk 8 新特性之函數式接口
•jdk 8 新特性之方法引用
•jdk 8 新特性之接口默認方法與靜態方法
•jdk 8 新特性之 optional
•jdk 8 新特性之重復注解
•jdk 8 新特性之 stream 流
•jdk 8 新特性之 stream 流(一)基礎體驗
•jdk 8 新特性之 stream 流(二)關鍵知識點
•jdk 8 新特性之 stream 流(三)縮減操作
•jdk 8 新特性之 stream 流(四)并行流
•jdk 8 新特性之 stream 流(五)映射
•jdk 8 新特性之 stream 流(六)收集縮
•jdk 8 新特性之 stream 流(七)流與迭代器
•jdk 8 新特性之擴展篇

更多新特性、新玩法,可以在 "java技術棧" 微信公眾號后臺回復關鍵字:java,獲取以上所有新特性文章。

結束語

現在許多人還在使用 java 8 或者 7,不過 8 在 2019 年初就會結束免費更新。現在 11 是長期支持版本,正是學習和上手 11 的好時機,寫這篇文章希望能對你有所啟發。

原文鏈接:https://www.cnblogs.com/javastack/archive/2018/09/27/9711264.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 69成人网 | 久久免费看少妇级毛片蜜臀 | 亚洲精品国产在线网站 | 国内精品在线观看视频 | 无码日韩精品一区二区免费 | 动漫人物差差差动漫人物免费观看 | 免费在线电视 | 99ri在线精品视频 | 国产成人精品免费视频软件 | 99r视频在线观看 | 国产成人久久精品区一区二区 | beeg最新 | 夫妻性生活在线 | 激情影院费观看 | 蜜桃影像传媒推广 | 羞羞在线观看 | 99视频全部看免费观 | 国产一级在线免费观看 | 成人影院vs一区二区 | 精品视频在线观看 | 久久青草费线频观看国产 | 国产欧美日韩成人 | 成年男女免费视频网站 | 国产91页| jk制服白丝超短裙流白浆 | 手机在线免费观看视频 | 乳环贵妇堕落开发调教番号 | 日韩视频一区 | 四虎影视在线影院在线观看观看 | 日韩首页| 日本www视频在线观看 | 欧美成人免费观看的 | 欧美二区三区 | 亚洲成人黄色网址 | 女仆色网址 | 性白俄罗斯高清xxxxx | 日产乱码2021永久手机版 | 91香蕉视频在线播放 | 91高清国产经典在线观看 | 日本在线看免费 | 欧美特黄一级大片 |