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

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文介绍了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


相关文章
|
12天前
|
前端开发 测试技术 API
一文掌握软件分支管理
本文详细介绍了软件分支管理的实践经验,结合具体项目案例,从版本号、分支命名、标签管理到合并策略等方面展开。通过清晰的规则和流程图示,帮助团队避免版本混乱,提升研发效率。强调主干与开发分支的核心作用,同时提醒合理控制分支数量,确保协作顺畅。适用于不同类型的项目,助力团队建立适合自身的版本管理体系。
204 68
一文掌握软件分支管理
|
20天前
|
机器学习/深度学习 API TensorFlow
BayesFlow:基于神经网络的摊销贝叶斯推断框架
BayesFlow 是一个基于 Python 的开源框架,利用摊销神经网络加速贝叶斯推断,解决传统方法计算复杂度高的问题。它通过训练神经网络学习从数据到参数的映射,实现毫秒级实时推断。核心组件包括摘要网络、后验网络和似然网络,支持摊销后验估计、模型比较及错误检测等功能。适用于流行病学、神经科学、地震学等领域,为仿真驱动的科研与工程提供高效解决方案。其模块化设计兼顾易用性与灵活性,推动贝叶斯推断从理论走向实践。
74 7
BayesFlow:基于神经网络的摊销贝叶斯推断框架
|
4天前
|
边缘计算 弹性计算 API
超实用!魔搭社区 + 阿里云边缘云ENS,快速部署大模型应用
本文介绍了如何通过魔搭社区(ModelScope)与阿里云边缘云ENS结合,快速部署大模型并验证其效果。魔搭社区作为中国最大的开源模型平台,提供从模型探索到部署的一站式服务,而阿里云边缘云ENS则以超过3200个全球节点支持低时延、本地化的部署方案。文章详细说明了新建部署入口、模型选择、服务配置及效果验证的全流程,并提供了代码示例展示终端问答Bot的实际运行效果。未来,“模型即服务”(MaaS)模式将持续为开发者和企业带来更多创新机会,助力技术落地与业务升级。
63 12
|
2月前
|
人工智能 IDE API
10行代码,实现你的专属阿里云OpenAPI MCP Server
本文介绍如何用10行Python代码创建专属阿里云OpenAPI MCP Server。针对传统MCP Server工具固化、开发复杂等问题,提出借助alibaba-cloud-ops-mcp-server实现灵活拓展的方案。通过配置服务与API名称,运行简短代码即可生成支持SSE连接的MCP Server。用户无需深入了解阿里云OpenAPI细节,大幅降低开发门槛。未来将探索通用工具设计,实现固定工具调用任意API,进一步提升灵活性与效率。
|
10天前
|
API Android开发 数据安全/隐私保护
APP Trace 传参安装流程详解 (开发者视角)
本文介绍了Trace传参安装技术,用于追踪应用安装来源、传递自定义数据及实现深度链接等功能。内容涵盖Android和iOS平台的实现方案,包括Google Play Referrer、Firebase Dynamic Links和Apple App Store参数等工具的使用。同时,详细说明了服务器端处理流程、测试验证方法以及隐私合规 considerations。还探讨了高级应用场景如延迟深度链接和跨平台归因,并提供了常见问题的解决方案,帮助开发者高效实现该功能以支持渠道效果评估与用户行为分析。
|
10天前
|
定位技术
安徽京准分享:北斗RDSS授时和北斗授时RNSS的区别
安徽京准分享:北斗RDSS授时和北斗授时RNSS的区别
|
10天前
|
存储 安全 Java
Java 基础知识超详细整理总结及学习要点解析
本文全面总结了Java基础知识,涵盖语言特性、语法基础、面向对象编程、集合框架、异常处理等核心内容。文章详细解析了Java的面向对象特性(如类与对象、构造方法、方法重载)、集合框架(如ArrayList、HashMap)、异常分类及处理,并深入探讨JVM内存模型、字符串比较、BigDecimal使用等重要知识点。此外,还提供了实际应用示例,帮助开发者更好地理解和掌握Java编程。代码资源可从文末链接获取。
80 4
|
9天前
|
人工智能 Java 决策智能
Spring AI Alibaba 1.0 GA 正式发布,Java 智能体开发进入新时代
Spring AI Alibaba 是一款以 Spring AI 为基础,深度集成百炼平台的 Java 框架,支持 ChatBot、工作流及多智能体应用开发。2025 年,AI 智能体快速发展,从单智能体到通用智能体多种构建模式涌现。Spring AI Alibaba 提供 Graph 多智能体框架、企业级 MCP 集成和零代码快速构建方案,助力开发者高效构建智能体。官方发布 JManus 和 DeepResearch 等产品,探索自主规划能力与垂直领域应用。未来将优化性能、增强可观测性并推进自动开发平台建设。
332 38
OSZAR »