Java 11 - 新特性

你好,有抱负的Java程序员们!我很高兴能作为你们的向导,带领你们走进Java 11的精彩世界。作为一位教授计算机科学多年的老师,我见证了无数学生从完全的初学者成长为自信的编码者。所以,如果你是从零开始,不用担心——我们会一步步来,在你意识到之前,你将能够像专业人士一样编写Java代码!

Java 11 - New Features

Java 控制语句

让我们从基础开始。控制语句就像是编程中的交通信号灯——它们指导你的代码流程。在Java 11中,我们有一些巧妙的方式来控制程序的执行。

If-Else 语句

if-else语句可能是你最常用的控制结构。它就像是现实生活中的决策。这里有一个简单的例子:

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

在这段代码中,我们检查age变量是否为18岁或更大。如果是,我们打印出该人可以投票。如果不是,我们告诉他们他们太小了。就这么简单!

Switch 语句

当你有多个条件要检查时,switch语句非常伟大。把它看作是写多个if-else语句的更有效的方式。Java 11对switch语句做了一些很酷的改进。这里有一个例子:

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

这个switch语句检查day变量并打印出它是工作日还是周末。箭头语法(->)是Java 11中的新特性,它使代码更加简洁。

面向对象编程

面向对象编程(OOP)是Java中的一个基本概念。它就像是用乐高积木建造——你创建不同的对象,它们相互交互以形成你的程序。

类和对象

一个类就像是为创建对象而设计的蓝图。这里有一个表示汽车的简单类:

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 = "你好,世界!";
System.out.println(greeting.length());  // 打印: 13
System.out.println(greeting.toUpperCase());  // 打印: 你好,世界!

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 = "你好,Java 11!";
Path filePath = Path.of("example.txt");
Files.writeString(filePath, content);

String readContent = Files.readString(filePath);
System.out.println(readContent);  // 打印: 你好,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 = "你好,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 "你好,世界!";
}
}

这创建了一个Web应用程序,当访问根URL时,它将响应"你好,世界!"。

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