Java 代码变更审查工具,按 6 大维度生成结构化审查报告与修复建议。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。提供结构化输出和错误处理机制。
Coding
Java开发手册免费版
Try itJava 开发规约速查手册,覆盖命名、异常、并发、数据库等 7 大维度核心规范。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。
What it does
Java 开发规约速查手册,覆盖命名、异常、并发、数据库等 7 大维度核心规范。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。
The skill document
Java 开发手册(免费版)
概述
本工具为 Java 开发者提供开发规约的速查能力,覆盖编程规约、异常日志、单元测试、安全规约、数据库规约、工程结构、设计规约共 7 大维度。规约按约束力强弱分为【强制】、【推荐】、【参考】三级,帮助开发者编写规范、可维护的 Java 代码。免费版聚焦个人开发者的规约速查场景,提供简明的速查表与代码示例.
核心能力
| 维度 | 描述 | 规约数量 |
|---|---|---|
| 编程规约 | 命名、格式、OOP、并发、集合 | 20+ 条 |
| 异常日志 | 错误码、异常处理、日志规范 | 10+ 条 |
| 单元测试 | 测试用例、覆盖率、Mock | 8+ 条 |
| 安全规约 | SQL 注入、XSS、CSRF、脱敏 | 8+ 条 |
| 数据库规约 | 建表、索引、SQL、ORM | 15+ 条 |
| 工程结构 | 分层架构、依赖管理 | 8+ 条 |
| 设计规约 | UML、设计模式、设计原则 | 6+ 条 |
技术实现要点:核心能力基于input_params参数与output_format配置实现,支持创建/查询/修改/删除等操作模式,通过config_options进行运行时配置. |
核心功能执行
用input_params参数进行配置.
处理: 解析核心功能执行的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回核心功能执行的响应数据,包含状态码、结果和日志.
- 执行此能力时使用
input_params参数,支持创建/查询/导出操作
参数配置与调用
用config_options参数进行配置.
处理: 解析参数配置与调用的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回参数配置与调用的响应数据,包含状态码、结果和日志.
- 执行此能力时使用
config_options参数,支持修改/重置/导入操作
结果处理与输出
用output_format参数进行配置.
处理: 解析结果处理与输出的输入参数,完成核心逻辑,返回结构化响应. 输出: 返回结果处理与输出的响应数据,包含状态码、结果和日志.
- 执行此能力时使用
output_format参数,支持导出/保存/转换操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:Java、开发规约速查手册、覆盖命名、数据库等、大维度核心规范、开发者的开发规约、速查工具、大维度的规约指引、大维度规约速查、命名规范、格式规范、规范速查、并发处理与集合操、作规范、异常处理与日志规、范模板等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持.
使用场景
场景一:命名规范查询
开发者编写代码时需要查询命名规范.
用户:Java 类名和变量名的命名规范是什么
# ...
助手:
类名:UpperCamelCase
public class UserService { }
public class UserDO { } // DO/DTO/VO 例外
# ...
方法名/变量:lowerCamelCase
private String userName;
public void getUserById() { }
# ...
常量:全大写+下划线
public static final int MAX_RETRY_COUNT = 3;
# ...
包名:全小写
package com.company.project.service;
# ...
禁止:
- 拼音命名(如 yonghuMing)
- 中英文混合
- 使用下划线(常量除外)
场景二:并发处理规范查询
开发者需要查询线程池和 ThreadLocal 的使用规范.
用户:线程池创建和 ThreadLocal 使用的规范
# ...
助手:
线程池创建规范:
- 【强制】禁止使用 Executors 创建线程池(可能 OOM)
- 【强制】使用 ThreadPoolExecutor 显式创建
# ...
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(queueCapacity),
new ThreadFactory() {
private AtomicInteger counter = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "worker-" + counter.getAndIncrement());
}
},
new ThreadPoolExecutor.CallerRunsPolicy()
);
# ...
ThreadLocal 使用规范:
- 【强制】使用后必须 remove,避免内存泄漏
# ...
try {
threadLocal.set(value);
// 业务逻辑
} finally {
threadLocal.remove();
}
场景三:数据库建表规范查询
开发者需要查询数据库建表和索引命名规范.
-- 建表必备字段
CREATE TABLE example (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# ...
-- 索引命名规范
-- 主键: pk_字段名
-- 唯一: uk_字段名
-- 普通: idx_字段名
# ...
-- 禁止事项
-- 禁止 SELECT *
-- 禁止字符串拼接 SQL
-- 禁止使用存储过程处理业务逻辑
不适用场景
以下场景Java开发手册免费版不适合处理:
- 无明确技术栈的模糊需求
- 纯架构设计决策
- 运维部署管理
触发条件
需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于非本工具能力范围的需求.
快速开始
- 阅读## 核心能力章节了解skill功能
- 按## 依赖说明配置环境
- 执行所需能力对应的命令
- 参考## 错误处理章节处理异常
- 查看## FAQ解答常见疑问
禁止事项速查
| 禁止 | 原因 |
|---|---|
| 拼音命名 | 可读性差 |
| 魔法值 | 难以维护 |
SELECT * | 性能和可维护性 |
| Executors 创建线程池 | 可能 OOM |
| 字符串拼接 SQL | 注入风险 |
| finally 中 return | 丢失 try 返回值 |
| foreach 中 remove | ConcurrentModificationException |
| 空 catch 块 | 隐藏问题 |
必须事项速查
| 必须 | 原因 |
|---|---|
| 覆写方法加 @Override | 避免签名错误 |
| 表必备三字段 | id, create_time, update_time |
| 敏感数据脱敏 | 隐私保护 |
| 参数校验 | 安全防护 |
| ThreadLocal 回收 | 避免内存泄漏 |
| 日志用占位符 | 性能优化 |
错误处理
// 正确的异常处理
try {
// 业务逻辑
} catch (SpecificException e) {
logger.error("操作失败, 参数: {}", params, e);
throw new BusinessException("用户友好提示", e);
} finally {
// 资源关闭(JDK7+ try-with-resources)
}
// ...
// try-with-resources
try (Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
// ...
} catch (SQLException e) {
logger.error("数据库操作失败", e);
throw new RuntimeException(e);
}
| 序号 | 错误场景 | 原因 | 处理方式 | 优先级 |
|---|---|---|---|---|
| 1 | 输入参数缺失 | 用户未提供必要参数 | 提示用户提供所需参数后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令 | P0 |
| 2 | 执行超时 | 处理时间过长 | 检查输入数据量,分批处理 | P1 |
| 3 | 输出格式错误 | 结果不符合预期格式 | 检查output_format参数配置 | P1 |
示例
命名规范速查表
| 类型 | 规范 | 正确示例 | 错误示例 |
|---|---|---|---|
| 类名 | UpperCamelCase | UserService | userService |
| 方法名 | lowerCamelCase | getUserById() | GetUserById() |
| 变量名 | lowerCamelCase | userName | user_name |
| 常量 | 全大写下划线 | MAX_RETRY | maxRetry |
| 包名 | 全小写 | com.company.service | com.Company.Service |
| 枚举 | UpperCamelCase | HttpStatus.OK | HttpStatus.ok |
日志规范速查
// 使用 SLF4J 占位符(不要用字符串拼接)
logger.info("用户登录: userId={}", userId);
// ...
// 异常日志必须包含堆栈
logger.error("操作失败: {}", params, e); // e 作为最后一个参数
// ...
// 日志级别使用规范
logger.debug("调试信息: {}", detail); // 调试
logger.info("用户注册: {}", userId); // 重要业务
logger.warn("缓存未命中: {}", key); // 告警
logger.error("数据库异常", e); // 错误
// ...
// 禁止
System.out.println("..."); // 禁止使用控制台输出
logger.info("用户" + userId + "登录"); // 禁止字符串拼接
集合操作速查
// 集合转 Map 的正确方式
Map userMap = userList.stream()
.collect(Collectors.toMap(User::getId, u -> u));
// ...
// 指定初始容量
Map map = new HashMap<>(expectedSize / 0.75 + 1);
List list = new ArrayList<>(expectedSize);
// ...
// 安全的删除方式
// 错误
for (User u : userList) {
if (u.getStatus() == 0) {
userList.remove(u); // ConcurrentModificationException
}
}
// ...
// 正确
Iterator it = userList.iterator();
while (it.hasNext()) {
if (it.next().getStatus() == 0) {
it.remove();
}
}
// ...
// 或使用 removeIf
userList.removeIf(u -> u.getStatus() == 0);
最佳实践
-
常量代替魔法值:所有硬编码值提取为常量
public static final int STATUS_ACTIVE = 1; -
使用 try-with-resources:自动管理资源关闭
-
异常信息包含上下文:便于问题定位
throw new BusinessException("用户[" + userId + "]不存在"); -
日志用占位符:避免不必要的字符串拼接
-
集合指定初始容量:减少扩容开销
-
参数校验前置:在方法入口校验参数
-
避免在循环中创建对象:减少 GC 压力
-
使用 Optional 替代 null:更安全地处理空值
常见问题
Q1:为什么禁止使用 Executors?
// Executors.newFixedThreadPool() 使用无界队列,可能 OOM
ExecutorService executor = Executors.newFixedThreadPool(10);
// 内部使用 new LinkedBlockingQueue<>(),队列无上限
// ...
// 正确:使用 ThreadPoolExecutor 并指定有界队列
ExecutorService executor = new ThreadPoolExecutor(
10, 10, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1000) // 有界队列
);
Q2:foreach 中为什么不能 remove?
// foreach 使用 Iterator 遍历
// remove 会修改 modCount,导致 ConcurrentModificationException
// ...
// 正确方式一:Iterator.remove()
Iterator it = list.iterator();
while (it.hasNext()) {
if (condition) it.remove();
}
// ...
// 正确方式二:removeIf
list.removeIf(u -> condition);
Q3:如何正确处理 NPE?
// 使用 Optional 避免空指针
public String getUserName(User user) {
return Optional.ofNullable(user)
.map(User::getName)
.orElse("未知用户");
}
// ...
// 集合返回空集合而非 null
public List getUsers() {
return Collections.emptyList(); // 不返回 null
}
// ...
// 字符串判空
if (StringUtils.isNotBlank(name)) { }
Q4:数据库索引怎么建?
-- 索引命名
-- 主键: pk_字段名
-- 唯一: uk_字段名
-- 普通: idx_字段名
# ...
-- 索引原则
-- 1. 查询频繁的字段建索引
-- 2. 区分度高的字段优先
-- 3. 避免过多索引(影响写入性能)
-- 4. 联合索引遵循最左前缀原则
# ...
-- 示例
CREATE INDEX idx_user_status ON users(status, create_time);
-- 支持查询: WHERE status = ?
AND create_time > ?
-- 不支持: WHERE create_time > ?
Q5:日志级别怎么选?
| 级别 | 使用场景 | 示例 |
|---|---|---|
| ERROR | 影响业务功能的错误 | 数据库连接失败 |
| WARN | 可预期的异常,不影响主流程 | 缓存未命中 |
| INFO | 重要的业务操作 | 用户注册、订单创建 |
| DEBUG | 调试信息 | 方法参数、中间结果 |
| TRACE | 详细执行流程 | SQL 执行详情 |
Q6:如何做参数校验?
// 使用 JSR-303 注解校验
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String username;
// ...
@Min(value = 0, message = "年龄不能为负数")
private Integer age;
// ...
@Email(message = "邮箱格式不正确")
private String email;
}
// ...
// Controller 中使用
@PostMapping("/users")
public Result create(@Valid @RequestBody UserDTO dto) {
// dto 已通过校验
}
依赖说明
运行环境
- Agent 平台: 支持读取 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
- 操作系统: Windows / macOS / Linux
- JDK 版本: 建议 8 及以上
依赖详情
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| JDK | 编译器/运行时 | 推荐 | oracle.com 或 openjdk.net 下载 |
| SLF4J | 日志框架 | 推荐 | maven 中央仓库 |
| Lombok | 工具库 | 可选 | maven 中央仓库 |
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供 |
API Key 配置
- 本工具为纯 Markdown 指令驱动,无需额外 API Key
- 代码编译验证需要 JDK 环境
可用性分类
- 分类: MD+EXEC(Markdown 指令 + 命令行执行)
- 说明: 通过自然语言指令驱动 Agent 提供规约查询与代码建议,编译验证需要 JDK 执行能力
已知限制
- 需LLM支持,无LLM环境不可用
- 复杂业务场景建议结合人工经验判断
- 执行效率受模型能力与网络环境影响
- 当前为免费版本,如需完整功能请升级到付费版获取全部能力
输出格式
{
"success": true,
"data": {
"result": "Java开发手册免费版处理结果",
"execution_time": "0.5s",
"metadata": {
"version": "1.0",
"processor": "java dev manual"
}
},
"execution_log": ["解析输入参数", "执行核心处理", "格式化输出结果"],
"error": null
}
Related skills
Java 编码规范与避坑助手。在编写、修改、重构或审查任何 Java / Spring Boot 代码时使用本技能—— 无论用户是否提到编码规范或具体工具库(Java coding / code review / refactoring / best practices / code quality)。 覆盖:判空与字符串、集合与 Stream、日期时间、文件 IO / HTTP 调用 / JSON 序列化、 线程池与并发、Bean 拷贝、加密哈希、异常处理与日志、金额与浮点精确运算、 现代 Java 语法(JDK 8~25,按 LTS 版本门控)。 次级触发信号:new SimpleDate
智能业务分析与操作手册生成专家 v6 — 六层递进式骨架生长架构 + 知识图谱编织 + 增量回灌。从界面到模块到区域到功能到按钮到字段,逐层沉淀节点与证据,最终编织成网,输出真正详细的用户操作手册。核心能力:L0骨架→L1模块→L2区域→L3功能→L4操作→L5细节→图谱构建→Snake跨模块链→单版手册。适用:大项目增量生成/追求细致不是概括/需要端到端跨模块流程。不适用:单次简单问答/纯编码任务/只看摘要不看细节。
全流程游戏开发向导,涵盖设计、编码、测试、发布与运营基础。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。提供结构化输出和错误处理机制。
面向个人开发者的JavaScript代码风格指南,涵盖核心规则与基础代码审查能力。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。
编排完整API开发生命周期:设计、规格生成、脚手架、测试、文档与版本部署。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。提供结构化输出和错误处理机制。