Java 代码规范与文档规范(完整版)
本规范融合 Google Java Style Guide 基础、Oracle 官方代码约定 及 JavaDoc 标准 ,适配现代 Java 8+ 开发。建议配合 Spotless、Checkstyle、JavaDoc 等工具落地。
一、代码规范
1.1 命名规范
📌 注意 :禁止使用拼音、无意义的缩写(如 a, b 除外)。布尔变量避免用否定式(isNotError → isValid)。
1.2 注释规范
文件头注释(建议每个类文件都有)
类 / 接口 / 枚举 / 注解注释(JavaDoc)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class ConfigParser { ... }
方法注释(JavaDoc)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static int gcd (int a, int b) { if (a == 0 && b == 0 ) { throw new IllegalArgumentException ("Both a and b cannot be zero." ); } }
字段注释 (简单明了,可用行注释)
1 2 3 4 5 private static final int DEFAULT_TIMEOUT_MS = 5000 ;private Map<String, Session> sessionMap;
块注释与行内注释
1.3 代码格式(基于 Google Java Style)
核心约束(完整细节参考 Google Java Style Guide ):
缩进 :2 空格(不允许 Tab)
行宽 :最大 100 字符(可调整为 120,团队协商)
大括号 :K&R 风格(左括号不换行,右括号独占一行,除非紧跟 else)
空行 :import 之后、成员之间、方法之间适当空行
import :不使用通配符(import java.util.*; 禁止);分组顺序:static import → java.* → javax.* → org.* → com.* → 项目内部,每组按字母排序
空格 :关键字 if/for/while 后有空格;方法名与参数列表的左括号之间无空格;运算符两侧加空格
自动化工具配置
Maven 项目(pom.xml) :使用 spotless-maven-plugin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <plugin > <groupId > com.diffplug.spotless</groupId > <artifactId > spotless-maven-plugin</artifactId > <version > 2.43.0</version > <configuration > <java > <googleJavaFormat > <version > 1.18.1</version > <style > GOOGLE</style > </googleJavaFormat > <trimTrailingWhitespace /> <endWithNewline /> </java > </configuration > </plugin >
运行:mvn spotless:apply
Gradle 项目 :使用 gradle-spotless-plugin
1 2 3 4 5 6 7 8 9 10 plugins { id 'com.diffplug.spotless' version '6.25.0' } spotless { java { googleJavaFormat() trimTrailingWhitespace() endWithNewline() } }
二、文档规范
2.1 项目级文档:README.md(必须)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 项目名称 一句话简介(如:高性能配置中心客户端)。 ## 技术栈 - Java 11+- Maven / Gradle- Spring Boot(如有)## 快速开始 ### 依赖添加 Maven: ```xml <dependency> <groupId>com.example</groupId> <artifactId>config-client</artifactId> <version>1.0.0</version> </dependency>
示例代码
1 2 ConfigClient client = new ConfigClient ("http://config-server:8080" );String value = client.get("app.name" );
构建与运行
1 2 ./mvnw clean package java -jar target/app.jar
模块架构
(Mermaid 或图片)
…
1 2 3 4 5 6 7 8 ### 2.2 JavaDoc 生成 API 文档 - 所有公共类、接口、枚举、注解及其公共/protected 方法必须有 JavaDoc - 生成命令(Maven): ```bash mvn javadoc:javadoc # 生成到 target/site/apidocs
配置 pom.xml 插件确保 UTF-8 和编码规范:
1 2 3 4 5 6 7 8 9 10 11 12 <plugin > <groupId > org.apache.maven.plugins</groupId > <artifactId > maven-javadoc-plugin</artifactId > <version > 3.6.3</version > <configuration > <charset > UTF-8</charset > <docencoding > UTF-8</docencoding > <links > <link > https://docs.oracle.com/en/java/javase/11/docs/api/</link > </links > </configuration > </plugin >
2.3 核心模块补充文档(架构设计)
在 docs/ 目录下为复杂模块编写单独的 .md 文件,例如 docs/config-parser-design.md,内容包括:
模块职责
类图和时序图(PlantUML / Mermaid)
关键算法解释
配置说明
三、目录结构推荐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 project/ ├── README.md ├── pom.xml / build.gradle ├── .gitignore ├── .editorconfig # 统一 IDE 格式 ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/company/project/ │ │ │ ├── config/ │ │ │ ├── service/ │ │ │ └── util/ │ │ └── resources/ │ │ ├── logback.xml │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/company/project/ │ └── config/ │ └── ConfigParserTest.java ├── docs/ │ ├── api/ # JavaDoc 生成输出 │ ├── architecture.md │ └── module-details.md └── scripts/
四、工具链集成(CI / pre-commit)
结合 pre-commit 框架(适用于 Java):
1 2 3 4 5 6 7 repos: - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks rev: v2.13.0 hooks: - id: pretty-format-java args: [--autofix , --google-style ]
或直接使用 Maven / Gradle 插件在构建时执行:
Maven :mvn spotless:check(CI 检查)+ mvn spotless:apply(本地格式化)
Gradle :gradle spotlessJavaCheck / gradle spotlessApply
静态分析 :Checkstyle(配合 google_checks.xml),可通过 mvn checkstyle:check 执行。
五、示例代码(完整类)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 package com.example.util;public final class MathUtils { private MathUtils () { throw new UnsupportedOperationException ("Utility class" ); } public static int gcd (int a, int b) { if (a == 0 && b == 0 ) { throw new IllegalArgumentException ("Both a and b cannot be zero." ); } a = Math.abs(a); b = Math.abs(b); while (b != 0 ) { int temp = b; b = a % b; a = temp; } return a; } }
对应测试类(示例):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.example.util;import org.junit.jupiter.api.Test;import static org.junit.jupiter.api.Assertions.*;class MathUtilsTest { @Test void testGcdNormal () { assertEquals(5 , MathUtils.gcd(10 , 15 )); assertEquals(7 , MathUtils.gcd(14 , 21 )); } @Test void testGcdWithZero () { assertEquals(5 , MathUtils.gcd(0 , 5 )); assertEquals(8 , MathUtils.gcd(8 , 0 )); } @Test void testGcdBothZero () { assertThrows(IllegalArgumentException.class, () -> MathUtils.gcd(0 , 0 )); } }
六、规范检查清单(提交前)
[ ] 类名、方法名、变量名符合命名规范
[ ] 所有公共元素有 JavaDoc(类、公共方法、常量)
[ ] 无 System.out.println 等调试代码,使用日志框架
[ ] mvn spotless:check 通过(格式统一)
[ ] mvn checkstyle:check 无严重违规
[ ] 无编译警告(尤其是泛型、资源未关闭等)
[ ] README.md 已更新(含构建运行说明)
[ ] 核心模块变更已补充 docs/ 下的设计文档
本规范即日起生效。 代码格式以 spotless 自动格式化的结果为准,无需人工争论。API 文档采用 JavaDoc 标准自动生成并发布到项目站点。