Java 11 - 新功能

你好,有志於Java程式設計的各位!我很興奮能成為你們進入Java世界的導遊。作為一個教了多年電腦科學的人,我見過無數學生從完全的初學者變成自信的編程者。所以,如果你從零開始,不必擔心——我們會一步步來,在你還沒反應過來之前,你將能夠像專業人士一樣寫出Java代碼!

Java 11 - New Features

Java 控制語句

讓我們從基礎開始。控制語句就像是編程中的交通燈——它們指導你的代碼流程。在Java 11中,我們有一些巧妙的方法來控制我們程序的執行。

如果-否則語句

if-else語句可能是你最常用的控制結構。它就像在真實生活中做決定一樣。這裡有一個簡單的例子:

int age = 18;
if (age >= 18) {
System.out.println("你可以投票!");
} else {
System.out.println("對不起,你年紀太小,不能投票。");
}

在這段代碼中,我們正在檢查變量age是否為18歲或更大。如果是,我們打印出該人可以投票。如果不是,我們告訴他們年紀太小。就这么簡單!

開關語句

開關語句在有多個條件要檢查時非常方便。把它看作是寫多個if-else語句的更高效的方式。Java 11為開關語句引入了一些很酷的改進。這裡有一個例子:

String day = "Monday";
switch (day) {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" -> System.out.println("工作日");
case "Saturday", "Sunday" -> System.out.println("週末");
default -> System.out.println("無效的日期");
}

這個開關語句檢查day變量並打印出它是工作日還是週末。箭頭語法(->)是Java 11中新引入的,它使代碼更簡潔。

面向對象程式設計

面向對象程式設計(OOP)是Java中的一個基本概念。它就像用LEGO積木建設——你創建不同的對象,它們相互交互以形成你的程序。

類與對象

一個類就像是創建對象的藍圖。這裡有一個代表汽車的簡單類:

public class Car {
String make;
String model;
int year;

public void startEngine() {
System.out.println("隆隆!這輛 " + year + " " + make + " " + model + " 開始啟動。");
}
}

現在,讓我們從這個類中創建一個對象:

Car myCar = new Car();
myCar.make = "豐田";
myCar.model = "花冠";
myCar.year = 2021;
myCar.startEngine();

當你運行這段代碼時,它會打印出:"隆隆!這輛 2021 豐田 花冠 開始啟動。"

Java 內置類

Java提供了一套豐富的內置類,讓我們的生活變得更容易。讓我們看看一些:

String 類

String類用於操作文本。這裡有一個例子:

String greeting = "Hello, World!";
System.out.println(greeting.length());  // 打印: 13
System.out.println(greeting.toUpperCase());  // 打印: HELLO, WORLD!

ArrayList 類

ArrayList是一個可變的數組,可以根據需要增長或縮小:

import java.util.ArrayList;

ArrayList<String> fruits = new ArrayList<>();
fruits.add("蘋果");
fruits.add("香蕉");
fruits.add("櫻桃");
System.out.println(fruits);  // 打印: [蘋果, 香蕉, 櫻桃]

Java 文件處理

文件處理對於從文件讀取和寫入數據至關重要。Java 11引入了一些新方法來使這些操作更容易:

import java.nio.file.Files;
import java.nio.file.Path;

String content = "Hello, Java 11!";
Path filePath = Path.of("example.txt");
Files.writeString(filePath, content);

String readContent = Files.readString(filePath);
System.out.println(readContent);  // 打印: Hello, Java 11!

這段代碼將一個字符串寫入文件,然後再讀回來。writeStringreadString方法是Java 11中新引入的,它們使文件I/O變得更加簡單。

Java 錯誤與異常

錯誤和異常就像是編程道路上的坑洼。Java幫助我們優雅地處理這些問題:

try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("哎呀!你不能除以零。");
} finally {
System.out.println("不管有沒有錯誤,這個總是會運行。");
}

這段代碼嘗試除以零(這在數學中是不允許的),捕獲由此產生的異常,並打印出一個友好的消息而不是崩潰。

Java 多線程

多線程就像是在玩雜技——它允許你的程序同時做多件事。這裡有一個簡單的例子:

class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getId() + " 值 " + i);
}
}
}

public class Main {
public static void main(String args[]) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start();
t2.start();
}
}

這會創建兩個線程,它們會並發運行,每個都打印出它自己的線程ID和一個值。

Java 同步

當多個線程訪問共享資源時,我們需要同步它們以避免衝突。這就像在交通樞紐設置交通燈:

class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public int getCount() {
return count;
}
}

synchronized關鍵字確保同時只有一個線程可以執行increment方法。

Java 網絡編程

Java讓創建網絡應用程序變得容易。這裡有一個簡單的服務器,它聽取連接:

import java.net.*;
import java.io.*;

public class SimpleServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
System.out.println("服務器正在監聽8080端口");
Socket socket = serverSocket.accept();
System.out.println("客戶端已連接");
}
}

這個服務器在端口8080上監聽,並在客戶端連接時打印一條消息。

Java 集合

Java集合就像是存儲對象的不同類型的容器。讓我們看看一些:

List

import java.util.*;

List<String> fruits = new ArrayList<>();
fruits.add("蘋果");
fruits.add("香蕉");
System.out.println(fruits);  // 打印: [蘋果, 香蕉]

Set

Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1);  // 重複,不會被添加
System.out.println(numbers);  // 打印: [1, 2]

Map

Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
System.out.println(ages.get("Alice"));  // 打印: 25

Java 接口

接口就像是類可以同意遵守的合同。這裡有一個例子:

interface Animal {
void makeSound();
}

class Dog implements Animal {
public void makeSound() {
System.out.println("旺旺!");
}
}

class Cat implements Animal {
public void makeSound() {
System.out.println("喵喵!");
}
}

DogCat都實現了Animal接口,同意提供makeSound方法。

Java 數據結構

數據結構是組織和存儲數據的方式。讓我們看一個簡單的鏈表:

class Node {
int data;
Node next;

Node(int d) { data = d; }
}

class LinkedList {
Node head;

public void add(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = newNode;
}
}

public void print() {
Node current = head;
while (current != null) {
System.out.print(current.data + " ");
current = current.next;
}
System.out.println();
}
}

public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(1);
list.add(2);
list.add(3);
list.print();  // 打印: 1 2 3
}
}

這段代碼實現了一個簡單的鏈表數據結構。

Java 集合演算法

Java為集合提供了許多有用的演算法。這裡有一個排序的例子:

import java.util.*;

List<Integer> numbers = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5));
Collections.sort(numbers);
System.out.println(numbers);  // 打印: [1, 1, 2, 3, 4, 5, 5, 6, 9]

高級Java

隨著你的進步,你將遇到更多高級的Java概念。其中一個這樣的概念是lambda表達式,它在Java 8中引入,並在Java 11中進一步改進:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(n -> System.out.println(n * 2));

這段代碼使用lambda表達式將每個數字乘以2並打印出來。

Java 雜項

Java 11引入了一些雜項特性和改進。其中之一是var關鍵字,用於局部變量類型推斷:

var message = "Hello, Java 11!";
System.out.println(message);

編譯器推斷message是一個String。

Java API與框架

Java有一個庞大的API和框架生態系統。其中一個流行的框架是Spring Boot。以下是一個簡單的"Hello World" Spring Boot應用程序:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class HelloWorldApplication {

public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}

@GetMapping("/")
public String hello() {
return "Hello, World!";
}
}

這個創建了一個網絡應用程序,當你訪問根URL時,它會回應"Hello, World!"。

Java 類引用

Java允許你在運行時獲取類的引用。這裡有一個例子:

Class<?> stringClass = String.class;
System.out.println(stringClass.getName());  // 打印: java.lang.String

Java 有用的資源

以下是一些學習Java的有用資源:

  1. Oracle官方Java文檔
  2. Codecademy的Java課程
  3. "Head First Java"書籍
  4. Stack Overflow,用於提問

新功能

Java 11引入了許多新功能。以下是一些新功能的摘要:

功能 描述
局部變量語法為Lambda參數 在lambda表達式中允許使用var
HTTP客戶端(標準) 標準化的HTTP客戶端API
單文件源代碼程序啟動 直接運行Java源代碼文件
字符串方法 新方法,如isBlank(), lines(), strip()
文件方法 新方法,如readString(), writeString()

這就是我們對Java 11的快速導覽!記住,學習編程就像學習一門新語言——它需要練習、耐心和毅力。如果你一開始不能理解所有內容,不要氣餒。持續編碼,持續試驗,最重要的是,保持樂趣!在你反應過來之前,你將能夠编写复杂数的Java應用程序,並且會驚訝於一切起初看起來是多麼困難。快樂編程!

Credits: Image by storyset