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