W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Java10它號稱有109項新特性,包含12個JEP。
需要注意的是,本次Java10并不是Oracle的官方LTS版本,所以咱們可以先了解新特性。然后坐等java11的發(fā)布再考慮在生產(chǎn)中使用吧。
特性列表
局部變量的類型推斷 var關(guān)鍵字
GC改進和內(nèi)存管理 并行全垃圾回收器 G1
垃圾回收器接口
線程-局部變量管控
合并 JDK 多個代碼倉庫到一個單獨的儲存庫中
新增API:ByteArrayOutputStream
新增API:List、Map、Set
新增API:java.util.Properties
新增API: Collectors收集器
其它特性
1、局部變量的類型推斷 var關(guān)鍵字
這個新功能將為Java增加一些語法糖 - 簡化它并改善開發(fā)者體驗。新的語法將減少與編寫Java相關(guān)的冗長度,同時保持對靜態(tài)類型安全性的承諾。
這可能是Java10給開發(fā)者帶來的最大的一個新特性。下面主要看例子:
public static void main(String[] args) {
var list = new ArrayList<String>();
list.add("hello,world!");
System.out.println(list);
}
這是最平常的使用。注意賦值語句右邊,最好寫上泛型類型,否則會有如下情況:
public static void main(String[] args) {
var list = new ArrayList<>();
list.add("hello,world!");
list.add(1);
list.add(1.01);
System.out.println(list);
}
么都可以裝,非常的不安全了。和js等語言不同的是,畢竟Java還是強類型的語言,所以下面語句是編譯報錯的:
public static void main(String[] args) {
var list = new ArrayList<String>();
list.add("hello,world!");
System.out.println(list);
list = new ArrayList<Integer>(); //編譯報錯
}
注意:注意:注意:下面幾點使用限制
局部變量初始化
for循環(huán)內(nèi)部索引變量
傳統(tǒng)的for循環(huán)聲明變量
public static void main(String[] args) {
//局部變量初始化
var list = new ArrayList<String>();
//for循環(huán)內(nèi)部索引變量
for (var s : list) {
System.out.println(s);
}
//傳統(tǒng)的for循環(huán)聲明變量
for (var i = 0; i < list.size(); i++) {
System.out.println(i);
}
}
下面這幾種情況,都是不能使用var的
方法參數(shù)
全局變量
public static var list = new ArrayList<String>(); //編譯報錯
public static List<String> list = new ArrayList<>(); //正常編譯通過
構(gòu)造函數(shù)參數(shù)
方法返回類型
字段
捕獲表達式(或任何其他類型的變量聲明)
2、GC改進和內(nèi)存管理 并行全垃圾回收器 G1
JDK 10中有2個JEP專門用于改進當前的垃圾收集元素。
Java 10的第二個JEP是針對G1的并行完全GC(JEP 307),其重點在于通過完全GC并行來改善G1最壞情況的等待時間。G1是Java 9中的默認GC,并且此JEP的目標是使G1平行。
3、垃圾回收器接口
這不是讓開發(fā)者用來控制垃圾回收的接口;而是一個在 JVM 源代碼中的允許另外的垃圾回收器快速方便的集成的接口。
4、線程-局部變量管控
這是在 JVM 內(nèi)部相當?shù)图墑e的更改,現(xiàn)在將允許在不運行全局虛擬機安全點的情況下實現(xiàn)線程回調(diào)。這將使得停止單個線程變得可能和便宜,而不是只能啟用或停止所有線程。
5、合并 JDK 多個代碼倉庫到一個單獨的儲存庫中
在 JDK9 中,有 8 個倉庫: root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10 中這些將被合并為一個,使得跨相互依賴的變更集的存儲庫運行 atomic commit (原子提交)成為可能。
6、新增API:ByteArrayOutputStream
String toString(Charset): 重載 toString(),通過使用指定的字符集解碼字節(jié),將緩沖區(qū)的內(nèi)容轉(zhuǎn)換為字符串。
7、新增API:List、Map、Set
這3個接口都增加了一個新的靜態(tài)方法,copyOf(Collection)。這些函數(shù)按照其迭代順序返回一個不可修改的列表、映射或包含給定集合的元素的集合。
8、新增API:java.util.Properties
增加了一個新的構(gòu)造函數(shù),它接受一個 int 參數(shù)。這將創(chuàng)建一個沒有默認值的空屬性列表,并且指定初始大小以容納指定的元素數(shù)量,而無需動態(tài)調(diào)整大小。還有一個新的重載的 replace 方法,接受三個 Object 參數(shù)并返回一個布爾值。只有在當前映射到指定值時,才會替換指定鍵的條目。
9、新增API: Collectors收集器
toUnmodifiableList():
toUnmodifiableSet():
toUnmodifiableMap(Function, Function):
toUnmodifiableMap(Function, Function, BinaryOperator):
這四個新方法都返回 Collectors ,將輸入元素聚集到適當?shù)牟豢尚薷牡募现小?/p>
10、其它特性
線程本地握手(JEP 312)
其他Unicode語言 - 標記擴展(JEP 314)
基于Java的實驗性JIT編譯器
根證書頒發(fā)認證(CA)
刪除工具javah(JEP 313)
從JDK中移除了javah工具,這個很簡單并且很重要。
最后
JDK10的升級幅度其實主要還是以優(yōu)化為主,并沒有帶來太多對使用者驚喜的特性。所以建議廣大開發(fā)者還是研究一下2018年9月份到來Java11吧,最重要的是它是LTS版本哦,所以是可以運用在生產(chǎn)上的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: