Like Share Discussion Bookmark Smile

J.J. Huang   2020-03-30   Java   瀏覽次數:

Java 8 | 新特性簡單介紹

最近在工作上在處理日期時區上的問題,以前拜讀過相關的文章,隱約記得時區問題很難處理,沒想到自己有這麼一天處理時區問題,我想說的是⋯⋯XXX真的有夠難處理;要注意和考慮的東西太多了,還有很多技術債,在讀完寫完這個Java 8的新特性後,我一定會接著把時區問題拉出來好好寫一番。

這邊會突然介紹Java 8的新特性,主要是因為自己的不熟悉,以往工作上都是使用Java 7以下的版本居多,雖然Java 8有拜讀過,但是實際下去使用和深入研究是沒有的。身為一個技術人,持續進步、努力學習、虛心受教,不會不懂不知道並不可恥,可恥的是不願意承認,保持良好的學習心態才是最重要的。

在開始之前先將Java 8的新特性稍微簡介一下,後面再一個一個深入了解並且演練。

Java 8

Java 8(又稱為jdk 1.8) 是Java語言開發的一個主要版本。
Oracle 公司於2014318日發布Java 8,它支持函數式編程,新的JavaScript引擎,新的日期API,新的Stream API等。

Java 8 新特性

Java 8新增了非常多的特性,我們主要討論以下幾個:

  • Lambda表達式:Lambda允許把函數作為一個方法的參數(函數作為參數傳遞到方法中)。

  • 方法引用:方法引用提供了非常有用的語法,可以直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可以使語言的構造更緊湊簡潔,減少冗餘程式碼。

  • 默認方法:默認方法就是一個在接口裡面有了一個實現的方法。

  • 新工具:新的編譯工具,如:Nashorn引擎jjs、類依賴分析器jdeps

  • Stream API:新添加的Stream APIjava.util.stream) 把真正的函數式編程風格引入到Java中。

  • Date Time API:加強對日期與時間的處理。

  • Optional類:Optional類已經成為Java 8類庫的一部分,用來解決空指針異常。

  • Nashorn, JavaScript引擎:Java 8提供了一個新的Nashorn javascript引擎,它允許我們在JVM上運行特定的javascript應用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;

public class Java8Tester {
public static void main(String args[]){

List<String> names1 = new ArrayList<String>();
names1.add("Google ");
names1.add("Morose ");
names1.add("Dog ");
names1.add("GitLab ");

List<String> names2 = new ArrayList<String>();
names2.add("Google ");
names2.add("Morose ");
names2.add("Dog ");
names2.add("GitLab ");

Java8Tester tester = new Java8Tester();
System.out.println("使用 Java 7 語法: ");

tester.sortUsingJava7(names1);
System.out.println(names1);
System.out.println("使用 Java 8 語法: ");

tester.sortUsingJava8(names2);
System.out.println(names2);
}

// 使用 java 7 排序
private void sortUsingJava7(List<String> names){
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
}

// 使用 java 8 排序
private void sortUsingJava8(List<String> names){
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}
}

輸出的結果為:

1
2
3
4
使用 Java 7 語法: 
[Dog , GitLab , Google , Morose ]
使用 Java 8 語法:
[Dog , GitLab , Google , Morose ]

註:以上參考了
Java 8 新特性
Java 8的新特性—终极版
现代化 Java - Java8 指南