SUNKAIS OS · READ ONLY

Jarvis

登录后,可以询问自己的任务、项目和记录。

登录后使用
Sun KaisPersonal Research Institute · 私人研究机构

Mathematics · Computational Science · Engineering · Personal Knowledge Systems

更多
SUNKAIS · PERSONAL OS

搜索全站功能

选择 前往

LANG-06 · PROGRAMMING WORKBENCH

Java

用强类型、成熟 JVM 工具链和清晰分层构建长期服务。

围绕记录类、集合、异常、Maven/Gradle、JUnit 和 JVM 调试建立现代 Java 工程路径。

MENTAL MODEL / 心智模型

先建立正确的程序直觉

对象在垃圾回收堆中存活,但文件、连接和锁仍需确定性关闭;checked/unchecked 异常都需要清晰的边界策略。

CODE REPOSITORY / 代码仓库锚点

从可测试的目录开始

java-project/
├─ pom.xml
├─ src/main/java/app/Main.java
├─ src/main/java/app/domain/Task.java
├─ src/test/java/app/TaskTest.java
└─ README.md

QUICK START / 第一条命令

先跑通最小闭环

mvn test && mvn package && java -jar target/app.jar

LEARNING ROUTE / 学习路径

从写出代码到守住生产边界

每个节点都包含可复制示例、判断原则与常见陷阱。

01常用方法记录、集合与流02工程结构标准目录与分层03构建运行Maven 生命周期与 JVM04依赖管理依赖范围与收敛05调试测试JUnit、断点与 JVM 观测06错误诊断类路径、空值与资源问题07安全边界反序列化、资源与配置安全
01常用方法

记录、集合与流

用不可变值对象和集合操作表达领域数据。

记录类代码示例
public record Task(String id, String title, Status status) {
    public Task {
        Objects.requireNonNull(id);
        Objects.requireNonNull(title);
    }
}

compact constructor 维护不变量;record 不自动让引用字段深度不可变。

流式汇总代码示例
var total = tasks.stream()
    .filter(Task::active)
    .mapToLong(Task::estimateMinutes)
    .sum();

短数据流适合声明式变换;复杂副作用流程使用普通循环更清晰。

02工程结构

标准目录与分层

领域逻辑不依赖 Web/数据库框架,入口层负责适配外部世界。

Maven 坐标代码示例
<groupId>com.sunkais</groupId>
<artifactId>memory-tools</artifactId>
<version>0.1.0-SNAPSHOT</version>
<properties><maven.compiler.release>21</maven.compiler.release></properties>

使用 release 同时约束语言和目标 JDK API。

包边界目录结构
app.domain      // 领域模型与规则
app.application // 用例编排
app.adapter     // HTTP、数据库与文件适配

依赖方向由外向内;避免按 controller/service/repository 形成跨领域大包。

03构建运行

Maven 生命周期与 JVM

使用 Wrapper 固定构建工具版本,CI 从测试到打包完整复现。

Maven Wrapper终端命令
./mvnw test
./mvnw verify
java -jar target/app.jar

Windows 使用 mvnw.cmd;verify 会执行绑定在完整生命周期中的检查。

最小 javac 实验终端命令
javac -d out src/main/java/app/Main.java
java -cp out app.Main

适合理解编译/类路径;正式项目使用 Maven/Gradle。

04依赖管理

依赖范围与收敛

控制传递依赖、范围与插件版本,减少 classpath 冲突。

测试依赖代码示例
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter</artifactId>
  <version>5.11.4</version>
  <scope>test</scope>
</dependency>

版本仅作结构示例,实际使用应由项目 BOM/当前官方版本统一管理。

依赖树终端命令
./mvnw dependency:tree

出现 NoSuchMethodError 时优先检查同一库多版本与依赖调解结果。

05调试测试

JUnit、断点与 JVM 观测

单元测试验证规则,集成测试验证数据库/网络边界。

JUnit 测试代码示例
@Test
void rejectsBlankTitle() {
    assertThrows(IllegalArgumentException.class, () -> new Task("t1", " ", TODO));
}

断言领域行为和异常类型,不依赖私有方法。

远程调试终端命令
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005 -jar target/app.jar

仅在可信本地/隔离环境监听,切勿向公网暴露调试端口。

06错误诊断

类路径、空值与资源问题

区分编译错误、类加载错误、业务异常和 GC/线程症状。

NoSuchMethodError诊断清单
运行 dependency:tree → 检查编译与运行 classpath → 对齐框架 BOM → 清理旧产物并重建。

它通常是二进制版本冲突,不是源代码中真的没有该方法。

线程卡死诊断清单
采集 thread dump → 查找 BLOCKED 与锁拥有者 → 确认外部调用是否发生在锁内 → 固定锁顺序。

不要仅通过增加线程数掩盖死锁或阻塞 I/O。

07安全边界

反序列化、资源与配置安全

验证外部 DTO,在领域边界转换,限制解析深度和资源使用。

确定性关闭代码示例
try (var input = Files.newBufferedReader(path, UTF_8)) {
    return parse(input);
}

try-with-resources 适用于 AutoCloseable;GC 不保证及时释放文件/连接。

安全清单诊断清单
参数化 SQL;禁用不可信原生 Java 反序列化;秘密外置;限制上传/请求体;修补 JDK 和依赖;错误响应不回显堆栈。

框架自动绑定的对象仍需字段、权限与业务规则校验。

PRIVATE CODE VAULT / 私人代码仓库

Java 私人代码与伪代码仓库

把 Java 的练习、工程片段、算法伪代码、验证说明与历史版本保存在登录后的私人空间。

TEXT ONLYRLS PRIVATENO EXECUTION
这里只归档,不运行代码。支持导入与下载纯文本源码;`.mlx`、`.xlsx`、`.accdb` 等二进制容器不会入库。密码、Token、私钥等秘密也会被拒绝,请改用环境变量。
PRIVATE SESSION REQUIRED

登录后打开你的私人仓库

游客只看到这个说明,不会收到、缓存或渲染任何私人源码。

安全登录

REFERENCE SOURCES / 官方与高质量资料

版本差异优先以官方文档为准

先在本站找回路径,再进入原始文档确认版本、平台和完整前置条件。

DELIVERY LOOP / 练习闭环

把每次练习变成可以重新运行的资产

  1. 01 · 定义写清输入、输出、边界与失败行为。
  2. 02 · 最小实现先让单一案例从命令行完整运行。
  3. 03 · 验证增加边界测试、调试信息与质量检查。
  4. 04 · 沉淀提交代码、README、依赖清单和复现命令。