Java 11 - 新特性
你好,有抱负的Java程序员们!我很高兴能作为你们的向导,带领你们走进Java 11的精彩世界。作为一位教授计算机科学多年的老师,我见证了无数学生从完全的初学者成长为自信的编码者。所以,如果你是从零开始,不用担心——我们会一步步来,在你意识到之前,你将能够像专业人士一样编写Java代码!
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!
这段代码将一个字符串写入文件,然后读取它。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 = "你好,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的有用资源:
- 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