偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

從 Java 9 到 Java 17 之 Java 10

開發(fā) 后端
Java 10的性能也明顯加強了,支持G1并行垃圾收集。另外引入了即時編譯技術(JIT),該技術可以加速java程序的運行速度。另外Java 10對容器集成也進行了優(yōu)化,JVM會根據(jù)容器的配置進行選擇CPU核心數(shù)量和內存占用。

[[426017]]

在上一篇我們對Java 9的特性進行了一些回顧,今天接著來看看Java 10帶來了什么特性。之所以需要把Java 8 到Java 17的特性歸納一遍,因為Java社區(qū)對Java 17的重視程度前所未有。話不多說,讓我們走進Java 10。

Java 10

從Java 10 開始,Java的迭代周期縮短為半年,半年發(fā)布一個版本。

局部變量類型推斷

在Java 6時初始化一個Map需要我們這樣來聲明:

  1. Map<String, String> map = new HashMap<String,String>(); 

事實上泛型方法的參數(shù)可以通過上下文推導出來,所以在Java 7 中簡化為:

  1. Map<String, String> map = new HashMap<>(); 

到了Java 10 進一步升華了類型推斷,我們看一個例子:

  1. var map = Map.of("hello","world"); 
  2. String var = map.get("hello"); 

猛一看還以為是Javascript的寫法,事實上這就是Java。編譯器從右側的初始化程序的類型推斷出初始化類型,這將大量減少一些樣板代碼。不過請注意,此特性僅適用于初始化局部變量,它不能用于成員變量、方法參數(shù)、返回類型等場景中。

另一件要注意的事情是var 并不是Java中的關鍵字,這確保了Java的向后兼容性。另外使用var沒有運行時開銷,也不會使 Java 成為動態(tài)語言。var標記的變量的類型仍然是在編譯時推斷出來。

var 不應該被濫用

雖然這樣“爽起來了”,但是var也不應該被濫用。

下面這種寫法明細可讀性差,導致變量的類型需要你去DEBUG:

  1. var data = someObject.getData(); 

Stream流中也盡量不要使用:

  1. // 可讀性差 
  2. var names= apples.stream() 
  3.     .map(Apple::getName) 
  4.     .collect(Collectors.toList()); 

因此,在使用var時應該保證必要的可讀性。

另外,在多態(tài)這個重要的Java特性中,var表現(xiàn)的并不是很完美。如果Fruit有Apple和Orange兩種實現(xiàn)。

  1. var x = new Apple(); 

如果我們對x重新賦值為new Orange()就會報錯,因為編譯后x的類型就已經固定下來了。所以var和泛型一樣都是在編譯過程中起了作用。你必須保證var的類型是確定的。

那么話又說回來了,var結合泛型的鉆石符號<>會有什么情況發(fā)生呢?

下面的 empList的類型是ArrayList :

  1. var empList = new ArrayList<>(); 

如果我們需要明確集合中放的都是Apple就必須在右邊顯式聲明:

  1. var apples = new ArrayList<Apple>(); 

不可變集合

其實在Java 9中不可變集合已經得到了一些加強,在Java 10中進一步加強了不可變集合。為什么不可變集合變得如此重要?

不可變性(immutability),這是函數(shù)式編程的基石之一,因此加強不可變集合有助于函數(shù)式編程在Java中的發(fā)展。

安全性,由于集合不可變,因此就不存在競態(tài)條件,天然的線程安全性,無論在編碼過程中和內存使用中都有一定的優(yōu)勢,這種特性在Scala和Kotlin這兩種編程語言中大放異彩。

在Java 10 中又引入了一些新的API。

集合副本

復制一個集合為不可變集合:

  1. List<Apple> copyList = List.copyOf(apples); 

任何修改此類集合的嘗試都會導致java.lang.UnsupportedOperationException異常。

Stream歸納為不可變集合

之前Stream API的歸納操作collect(Collector collector)都只會把流歸納為可變集合,現(xiàn)在它們都有對應的不可變集合了。舉個例子:

List names= apples.stream() .map(Apple::getName) .collect(Collectors.toUnmodifiableList());

Optional.orElseThrow()

  1. Optional<String> optional = Optional.ofNullable(nullableVal);        // 可能會 NoSuchElementException        String  nullable = optional.get(); 

Optional如果值為null時去get會拋出NoSuchElementException異常。從語義上get應該肯定能得到什么東西,但是實際上異常了,這種歧義性太大了。所以增加了一個orElseThrow()方法來增強語義性。

其它增強特性 

Java 10的性能也明顯加強了,支持G1并行垃圾收集。另外引入了即時編譯技術(JIT),該技術可以加速java程序的運行速度。另外Java 10對容器集成也進行了優(yōu)化,JVM會根據(jù)容器的配置進行選擇CPU核心數(shù)量和內存占用。還有其它一些底層優(yōu)化特性這里就不多說了,了解為主,當你達到一定的層次會自己去了解的。到此Java 10的一些變化就歸納完了,其實并不是很多,都很好掌握。多多關注,不要走開,下次我們將對Java 11的一些變化和改進進行歸納。

本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯(lián)系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2021-12-07 23:53:34

Java 9Java 17Java 13

2021-09-29 06:28:12

Java 9 Java 17Java 11

2021-10-30 18:57:36

從Java 9Java 17Java 12

2018-04-27 13:20:12

Java 8Java 9Java 10

2011-07-22 16:11:12

java

2023-09-23 08:17:51

Java 17開發(fā)

2023-08-08 21:03:52

2012-03-31 10:49:18

ibmdw

2018-06-05 10:30:28

KotlinJava語言

2022-09-22 07:03:15

Java 18LTSOracle

2022-10-31 07:33:05

Javafor循環(huán)

2018-07-03 14:12:21

Java 9Java10Java11

2023-04-10 07:44:04

java9java21java

2020-08-18 10:20:50

Java 編程開發(fā)

2023-05-10 09:02:25

Java 8JDK 11

2022-10-30 10:14:43

Java循環(huán)語句

2022-09-30 07:32:48

循環(huán)while循環(huán)體

2022-11-26 00:34:57

數(shù)組Java程序

2021-04-07 08:00:00

Java開發(fā)工具

2021-11-26 06:43:19

Java分布式
點贊
收藏

51CTO技術棧公眾號