Java 8 - 新功能

你好,未來的Java大師!我很興奮能與你們一起踏上有關Java 8的精彩旅程。作為你們親切鄰居的計算機科學老師,我見過無數學生從編程新手蛻變成編程天才。今天,我們將探索Java 8帶來的一些最酷的功能。所以,拿起你喜歡的飲料,舒適地坐好,讓我們一起來看看吧!

Java 8 - New Features

Lambda 表達式

想像你在一個派對上,有人請你簡單介紹自己。你會從你的生平故事開始講述嗎?不會的,你會給出一個簡短而甜蜜的介紹。這正是Java中lambda表達式的用途 - 快速、簡潔的函數定義!

讓我們看一個簡單的例子:

// Java 8之前的寫法
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, old Java!");
}
};

// 使用Java 8 Lambda
Runnable runnableLambda = () -> System.out.println("Hello, Lambda!");

在這個例子中,我們創建了一個Runnable對象。Lambda表達式() -> System.out.println("Hello, Lambda!");是定義run()方法的簡寫方式。就像說,“當你執行這個時,打印'Hello, Lambda!'”。

Lambda 表達式為什麼很酷

  1. 它們使你的代碼更易於閱讀。
  2. 它們允許你將功能性作為方法參數。
  3. 它們讓你能夠編寫更簡潔的代碼。

方法引用

方法引用就像你那個總是知道最短路的聰明朋友。它們提供了一種更簡單的方式來引用方法或構造函數。

這裡有一個美味的例子:

List<String> fruits = Arrays.asList("apple", "banana", "cherry");

// 使用lambda
fruits.forEach(fruit -> System.out.println(fruit));

// 使用方法引用
fruits.forEach(System.out::println);

在這個水果場景中,System.out::println是一個方法引用。它表示,“對每個水果,使用System.out的println方法”。

默認方法

默認方法就像那個總是有備份計劃的朋友。它們讓你可以在不破壞現有實現的情況下,向接口添加新方法。

public interface Vehicle {
default void startEngine() {
System.out.println("隆隆!引擎啟動了。");
}
}

public class Car implements Vehicle {
// 沒有需要實現startEngine()
}

Car myCar = new Car();
myCar.startEngine(); // 輸出:隆隆!引擎啟動了。

在這裡,startEngine()Vehicle接口中的一個默認方法。任何實現Vehicle的類都會自動獲得這個方法!

Stream API

Stream API就像是一個超高效的装配線,用於你的數據。它讓你可以以聲明式的方式處理對象集合。

讓我們看看它是如何工作的:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// 偶數之和
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();

System.out.println("偶數之和: " + sum);

這段代碼就像是在說,“將這個數字列表中的偶數過濾出來,轉換為int,然後將它們加總”。這就是這麼簡單!

Optional 類

Optional類就像是你對null值的保險網。它幫助防止那些討厭的NullPointerExceptions

String name = null;
Optional<String> optionalName = Optional.ofNullable(name);

// 替代:if (name != null) { ... }
optionalName.ifPresent(n -> System.out.println("Hello, " + n));

// 或者提供一個默認值
String greeting = optionalName.orElse("陌生人");
System.out.println("Hello, " + greeting);

有了Optional,無論你有值還是沒有值,你總是準備好的!

新的日期時間API

Java 8引入了一個新的日期和時間API,這比舊的java.util.Date更加直觀且容易使用。

LocalDate today = LocalDate.now();
System.out.println("今天的日期: " + today);

LocalTime currentTime = LocalTime.now();
System.out.println("當前時間: " + currentTime);

LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("當前日期和時間: " + currentDateTime);

// 當前日期加1周
LocalDate nextWeek = today.plusWeeks(1);
System.out.println("1周後的日期: " + nextWeek);

這個新的API使得處理日期和時間變得像查看你的手錶一樣容易!

Nashorn JavaScript 引擎

最後但同樣重要的是,Java 8引入了Nashorn JavaScript引擎,讓你可以在Java應用程序中運行JavaScript代碼。這就像是有了一個能夠在Java和JavaScript之間翻譯的雙語朋友!

import javax.script.*;

public class NashornExample {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

engine.eval("print('Hello from JavaScript!');");
}
}

這段代碼在Java程序中直接運行JavaScript。這多有酷!

總結來說,Java 8帶來了大量令人興奮的功能,使得編程變得更加容易、高效和有趣。正如我們所見,這些功能不僅僅是花哨的東西 - 它們是能夠显著改進你代碼的強大工具。

記住,學習編程是一個旅程。不要擔心一切不會立即明朗。持續練習,持續探索,最重要的是,持續享受樂趣!在你意識到之前,你將會像專家一樣寫Java。未來的Java忍者,編程愉快!

Credits: Image by storyset