Java 最新技术实操:从基础到进阶的详细指南

简介: 本文介绍了Java 17及后续版本的核心技术实操,涵盖新特性、集合框架、异常处理和多线程编程等内容。主要包括:密封类(Sealed Classes)的继承层级控制、模式匹配(Pattern Matching)简化类型判断、文本块(Text Blocks)处理多行字符串;集合框架中的工厂方法和Stream API高级操作;异常处理的最佳实践如自动资源管理(ARM)和自定义异常;多线程编程中的CompletableFuture异步编程和ReentrantLock显式锁使用。

以下是基于Java最新技术的实操内容,结合Java 17及后续版本的特性,涵盖核心语法、面向对象、集合框架、异常处理等关键知识点,并提供具体的代码示例和应用场景。

一、Java 17+ 新特性实操

1. 密封类(Sealed Classes)

应用场景:限制类的继承层级,提高代码安全性。

// 定义密封接口,仅允许指定的类实现
public sealed interface Shape permits Circle, Rectangle {
   
    double area();
}

public final class Circle implements Shape {
   
    private final double radius;
    public Circle(double radius) {
    this.radius = radius; }
    @Override
    public double area() {
    return Math.PI * radius * radius; }
}

public final class Rectangle implements Shape {
   
    private final double width, height;
    public Rectangle(double width, double height) {
   
        this.width = width;
        this.height = height;
    }
    @Override
    public double area() {
    return width * height; }
}

2. 模式匹配(Pattern Matching)

应用场景:简化类型判断和转换逻辑。

public static void printArea(Object obj) {
   
    if (obj instanceof Shape s) {
     // 直接在if条件中进行类型匹配并赋值
        System.out.println("Area: " + s.area());
    } else {
   
        System.out.println("Not a shape");
    }
}

3. 文本块(Text Blocks)

应用场景:处理多行字符串(如JSON、SQL)。

String json = """
{
   
    "name": "Doubao",
    "age": 20,
    "skills": ["Java", "Python"]
}
""";

二、集合框架与 Stream API 进阶

1. 集合工厂方法

应用场景:快速创建不可变集合。

// 创建不可变List、Set、Map
List<String> names = List.of("Alice", "Bob", "Charlie");
Set<Integer> numbers = Set.of(1, 2, 3);
Map<String, Integer> scores = Map.of("Alice", 90, "Bob", 85);

2. Stream API 高级操作

应用场景:复杂数据处理与聚合。

import java.util.*;
import java.util.stream.*;

public class StreamDemo {
   
    public static void main(String[] args) {
   
        List<Product> products = Arrays.asList(
            new Product("Apple", 5.99, Category.FOOD),
            new Product("Laptop", 999.99, Category.ELECTRONICS),
            new Product("Bread", 2.99, Category.FOOD)
        );

        // 计算食品类商品的总价格
        double totalFoodPrice = products.stream()
            .filter(p -> p.getCategory() == Category.FOOD)
            .mapToDouble(Product::getPrice)
            .sum();

        // 按类别分组并统计数量
        Map<Category, Long> categoryCount = products.stream()
            .collect(Collectors.groupingBy(Product::getCategory, Collectors.counting()));

        System.out.println("Total food price: " + totalFoodPrice);
        System.out.println("Category count: " + categoryCount);
    }
}

enum Category {
    FOOD, ELECTRONICS }

record Product(String name, double price, Category category) {
   }  // 使用record简化类定义

三、异常处理最佳实践

1. 自动资源管理(ARM)

应用场景:文件操作、网络连接等需要自动关闭资源的场景。

import java.io.*;

public class FileDemo {
   
    public static void main(String[] args) {
   
        // try-with-resources自动关闭文件流
        try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
   
            String line;
            while ((line = reader.readLine()) != null) {
   
                System.out.println(line);
            }
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }
}

2. 自定义异常

应用场景:业务逻辑中的特定异常处理。

public class AgeException extends RuntimeException {
   
    public AgeException(String message) {
   
        super(message);
    }
}

public class UserService {
   
    public void registerUser(String name, int age) {
   
        if (age < 0 || age > 150) {
   
            throw new AgeException("Invalid age: " + age);
        }
        // 注册逻辑...
    }
}

四、多线程与并发编程

1. CompletableFuture 异步编程

应用场景:并行执行多个任务并处理结果。

import java.util.concurrent.*;

public class AsyncDemo {
   
    public static void main(String[] args) throws ExecutionException, InterruptedException {
   
        ExecutorService executor = Executors.newFixedThreadPool(2);

        // 异步任务1:查询用户信息
        CompletableFuture<String> userFuture = CompletableFuture.supplyAsync(
            () -> {
   
                try {
    Thread.sleep(1000); } catch (InterruptedException e) {
   }
                return "User: Doubao";
            }, executor
        );

        // 异步任务2:查询订单信息
        CompletableFuture<String> orderFuture = CompletableFuture.supplyAsync(
            () -> {
   
                try {
    Thread.sleep(1500); } catch (InterruptedException e) {
   }
                return "Order: #12345";
            }, executor
        );

        // 合并两个任务的结果
        CompletableFuture<String> combinedFuture = userFuture.thenCombine(orderFuture,
            (user, order) -> user + ", " + order
        );

        System.out.println(combinedFuture.get());  // 输出:User: Doubao, Order: #12345
        executor.shutdown();
    }
}

2. ReentrantLock 显式锁

应用场景:比synchronized更灵活的锁控制。

import java.util.concurrent.locks.ReentrantLock;

public class Counter {
   
    private final ReentrantLock lock = new ReentrantLock();
    private int count = 0;

    public void increment() {
   
        lock.lock();
        try {
   
            count++;
        } finally {
   
            lock.unlock();
        }
    }

    public int getCount() {
   
        return count;
    }
}

五、模块化编程(Java 9+)

1. 模块定义

应用场景:将项目拆分为独立模块,控制访问权限。

// module-info.java
module com.example.app {
   
    requires java.base;
    requires java.sql;
    exports com.example.service;  // 导出服务包
    uses com.example.plugin.Plugin;  // 使用插件接口
}

2. 服务发现

应用场景:通过接口发现并加载实现类。

// 定义插件接口
package com.example.plugin;
public interface Plugin {
   
    void execute();
}

// 模块实现
package com.example.plugin.impl;
import com.example.plugin.Plugin;
public class MyPlugin implements Plugin {
   
    @Override
    public void execute() {
   
        System.out.println("Plugin executed");
    }
}

// 服务加载
ServiceLoader<Plugin> loader = ServiceLoader.load(Plugin.class);
loader.forEach(Plugin::execute);

六、实用工具类与技巧

1. String API 增强

// 判断字符串是否为空白
"   ".isBlank();  // true

// 字符串缩进
"Hello\nWorld".indent(2);  // 每行缩进2个空格

// 重复字符串
"a".repeat(3);  // "aaa"

2. 日期时间 API(Java 8+)

import java.time.*;

LocalDate today = LocalDate.now();  // 当前日期
LocalTime now = LocalTime.now();    // 当前时间
LocalDateTime dateTime = LocalDateTime.of(today, now);  // 日期时间

// 计算两个日期之间的天数
LocalDate start = LocalDate.of(2023, 1, 1);
LocalDate end = LocalDate.of(2023, 12, 31);
long days = ChronoUnit.DAYS.between(start, end);  // 364

七、实战项目示例:图书管理系统

以下是一个简化的图书管理系统,展示Java面向对象编程的综合应用:

import java.util.*;

// 图书类
class Book {
   
    private final String id;
    private String title;
    private String author;
    private boolean isBorrowed;

    public Book(String id, String title, String author) {
   
        this.id = id;
        this.title = title;
        this.author = author;
        this.isBorrowed = false;
    }

    // Getters and setters
    public String getId() {
    return id; }
    public String getTitle() {
    return title; }
    public String getAuthor() {
    return author; }
    public boolean isBorrowed() {
    return isBorrowed; }
    public void setBorrowed(boolean borrowed) {
    isBorrowed = borrowed; }

    @Override
    public String toString() {
   
        return "Book{id='" + id + "', title='" + title + "', author='" + author + 
               "', borrowed=" + isBorrowed + "}";
    }
}

// 图书馆类
class Library {
   
    private final Map<String, Book> books = new HashMap<>();

    public void addBook(Book book) {
   
        books.put(book.getId(), book);
    }

    public void borrowBook(String bookId) {
   
        Book book = books.get(bookId);
        if (book == null) {
   
            System.out.println("Book not found");
            return;
        }
        if (book.isBorrowed()) {
   
            System.out.println("Book already borrowed");
            return;
        }
        book.setBorrowed(true);
        System.out.println("Successfully borrowed: " + book.getTitle());
    }

    public void returnBook(String bookId) {
   
        Book book = books.get(bookId);
        if (book == null) {
   
            System.out.println("Book not found");
            return;
        }
        if (!book.isBorrowed()) {
   
            System.out.println("Book is not borrowed");
            return;
        }
        book.setBorrowed(false);
        System.out.println("Successfully returned: " + book.getTitle());
    }

    public void displayBooks() {
   
        System.out.println("=== All Books ===");
        books.values().forEach(System.out::println);
    }
}

// 主程序
public class LibrarySystem {
   
    public static void main(String[] args) {
   
        Library library = new Library();
        Scanner scanner = new Scanner(System.in);

        // 添加示例图书
        library.addBook(new Book("1", "Java Core", "Cay S. Horstmann"));
        library.addBook(new Book("2", "Effective Java", "Joshua Bloch"));

        while (true) {
   
            System.out.println("\n=== Library System ===");
            System.out.println("1. Display Books");
            System.out.println("2. Borrow Book");
            System.out.println("3. Return Book");
            System.out.println("4. Exit");
            System.out.print("Enter choice: ");

            int choice = scanner.nextInt();
            scanner.nextLine();  // 消耗换行符

            switch (choice) {
   
                case 1 -> library.displayBooks();
                case 2 -> {
   
                    System.out.print("Enter book ID to borrow: ");
                    library.borrowBook(scanner.nextLine());
                }
                case 3 -> {
   
                    System.out.print("Enter book ID to return: ");
                    library.returnBook(scanner.nextLine());
                }
                case 4 -> {
   
                    System.out.println("Exiting...");
                    scanner.close();
                    return;
                }
                default -> System.out.println("Invalid choice");
            }
        }
    }
}

总结

以上实操内容涵盖了Java 17+的核心特性、集合框架高级应用、多线程编程、模块化设计等关键知识点,并通过图书管理系统示例展示了面向对象编程的综合实践。建议结合IDE(如IntelliJ IDEA)进行编码练习,加深对Java技术的理解和掌握。


Java 开发,Spring Boot, 微服务,云原生,容器化,Docker,Kubernetes,Java 18, 函数式编程,响应式编程,性能优化,代码重构,单元测试,持续集成,DevOps



代码获取方式
https://pan.quark.cn/s/14fcf913bae6


相关文章
|
6月前
|
监控 Cloud Native Java
Quarkus 云原生Java框架技术详解与实践指南
本文档全面介绍 Quarkus 框架的核心概念、架构特性和实践应用。作为新一代的云原生 Java 框架,Quarkus 旨在为 OpenJDK HotSpot 和 GraalVM 量身定制,显著提升 Java 在容器化环境中的运行效率。本文将深入探讨其响应式编程模型、原生编译能力、扩展机制以及与微服务架构的深度集成,帮助开发者构建高效、轻量的云原生应用。
688 44
|
6月前
|
安全 Java API
Java Web 在线商城项目最新技术实操指南帮助开发者高效完成商城项目开发
本项目基于Spring Boot 3.2与Vue 3构建现代化在线商城,涵盖技术选型、核心功能实现、安全控制与容器化部署,助开发者掌握最新Java Web全栈开发实践。
611 1
|
7月前
|
安全 Java 编译器
new出来的对象,不一定在堆上?聊聊Java虚拟机的优化技术:逃逸分析
逃逸分析是一种静态程序分析技术,用于判断对象的可见性与生命周期。它帮助即时编译器优化内存使用、降低同步开销。根据对象是否逃逸出方法或线程,分析结果分为未逃逸、方法逃逸和线程逃逸三种。基于分析结果,编译器可进行同步锁消除、标量替换和栈上分配等优化,从而提升程序性能。尽管逃逸分析计算复杂度较高,但其在热点代码中的应用为Java虚拟机带来了显著的优化效果。
215 4
|
7月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
912 3
|
7月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
2097 1
|
7月前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
1344 1
|
7月前
|
Java 测试技术 API
2025 年 Java 开发者必知的最新技术实操指南全览
本指南涵盖Java 21+核心实操,详解虚拟线程、Spring Boot 3.3+GraalVM、Jakarta EE 10+MicroProfile 6微服务开发,并提供现代Java开发最佳实践,助力开发者高效构建高性能应用。
1003 4
|
6月前
|
安全 Cloud Native Java
Java 模块化系统(JPMS)技术详解与实践指南
本文档全面介绍 Java 平台模块系统(JPMS)的核心概念、架构设计和实践应用。作为 Java 9 引入的最重要特性之一,JPMS 为 Java 应用程序提供了强大的模块化支持,解决了长期存在的 JAR 地狱问题,并改善了应用的安全性和可维护性。本文将深入探讨模块声明、模块路径、访问控制、服务绑定等核心机制,帮助开发者构建更加健壮和可维护的 Java 应用。
490 0
|
6月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
1919 0
|
6月前
|
缓存 Java API
2025 年小白也能轻松上手的 Java 最新学习路线与实操指南深度剖析
2025年Java最新学习路线与实操指南,涵盖基础语法、JVM调优、Spring Boot 3.x框架、微服务架构及容器化部署,结合实操案例,助你快速掌握企业级Java开发技能。
568 0