Java 11 - 新功能
你好,有志於Java程式設計的各位!我很興奮能成為你們進入Java世界的導遊。作為一個教了多年電腦科學的人,我見過無數學生從完全的初學者變成自信的編程者。所以,如果你從零開始,不必擔心——我們會一步步來,在你還沒反應過來之前,你將能夠像專業人士一樣寫出Java代碼!
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!
這段代碼將一個字符串寫入文件,然後再讀回來。writeString
和readString
方法是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("喵喵!");
}
}
Dog
和Cat
都實現了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的有用資源:
- Oracle官方Java文檔
- Codecademy的Java課程
- "Head First Java"書籍
- Stack Overflow,用於提問
新功能
Java 11引入了許多新功能。以下是一些新功能的摘要:
功能 | 描述 |
---|---|
局部變量語法為Lambda參數 | 在lambda表達式中允許使用var
|
HTTP客戶端(標準) | 標準化的HTTP客戶端API |
單文件源代碼程序啟動 | 直接運行Java源代碼文件 |
字符串方法 | 新方法,如isBlank() , lines() , strip() 等 |
文件方法 | 新方法,如readString() , writeString()
|
這就是我們對Java 11的快速導覽!記住,學習編程就像學習一門新語言——它需要練習、耐心和毅力。如果你一開始不能理解所有內容,不要氣餒。持續編碼,持續試驗,最重要的是,保持樂趣!在你反應過來之前,你將能夠编写复杂数的Java應用程序,並且會驚訝於一切起初看起來是多麼困難。快樂編程!
Credits: Image by storyset