导图社区 Java编码、代码格式化及Checkstyle规范
关于Java编码、代码格式化及Checkstyle规范的思维导图,主要内容有Java编码规范、代码格式化、Checkstyle。
编辑于2022-12-08 10:15:16 浙江省Java编码、代码格式化及Checkstyle规范
Java编码规范
为什么要有编码规范?
便于维护
便于交流
统一风格、美观
良好的习惯
改善程序可读性
Java文件组织
开头注释
包声明
导入声明
类和接口声明
类或接口文档注释
类或接口声明
类或接口实现注释
静态变量
public
protected
default
private
实例变量
public
protected
default
private
构造函数
方法:按功能分组排列,不要按作用域
缩进
4个空格缩进
行长度限制(120个?)
换行策略
在一个逗号后面断开
在一个操作符前面断开
缩进8个空格
注释
文档注释
Javadoc注释
实现注释
多行注释
单行注释(2种)
声明
变量
一行声明一个变量
声明时初始化变量,除非有其他不能初始化的原因
避免同名变量的覆盖问题
类、接口、方法
左大括号 "{" 位于声明语句同行的末尾
右大括号 "}" 另起一行,与相应的声明语句对齐,除非是一个空语句, "}" 应紧跟在 "{" 之后
方法
声明间以一空白行分隔
方法名和其参数列表前的“(”之间不要有空格
语句
每行一条语句
复合语句
左大括号 "{" 应位于复合语句起始行的行尾;
右大括号 "}" 应另起一行并与复合语句首行对齐
if、while、for语句总是用 "{" 和 "}" 括起来
当switch中的case没有break时,要进行注释
空白符
空行
源文件中两个类或接口之间
两个方法之间
一个方法内的两个逻辑段之间,用以提高可读性
空白
空白应该位于参数列表中逗号的后面
基本所有的二元运算符,应该使用空格将之与操作数分开
if的条件、for语句中的表达式应该被空格分开
强制转换后应该跟一个空格
命名规范(便于理解和记忆的词)
包
全部小写
java.lang
类
名词
单词的首字母大写
后面单词首字母大写
BufferedInputStream
接口
同“类”
Collection
方法
动词
单词首字母小写
后面单词首字母大写
add
变量
单词首字母小写
后面单词首字母大写
myWidth
常量
全部大写,单词间用下划线隔开
MIN_WIDTH
惯例
尽量缩小变量、方法、类的作用域
避免用一个对象访问一个类的静态变量和方法,用类名替代
除-1、0、1外,不要有Magic Number
避免在一个语句中给多个变量赋相同的值,也即避免复杂的语句
运算符优先级不明时,一定要加括号
XXX、TODO、FIXME的使用
实例
/* * @(#)Blah.java 1.82 99/03/18 * * Copyright (c) 1994-1999 Sun Microsystems, Inc. * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A. * All rights reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. */ package java.blah; import java.blah.blahdy.BlahBlah; /** * Class description goes here. * * @version 1.82 18 Mar 1999 * @author Firstname Lastname */ public class Blah extends SomeClass { /* A class implementation comment can go here. */ /** classVar1 documentation comment */ public static int classVar1; /** * classVar2 documentation comment that happens to be * more than one line long */ private static Object classVar2; /** instanceVar1 documentation comment */ public Object instanceVar1; /** instanceVar2 documentation comment */ protected int instanceVar2; /** instanceVar3 documentation comment */ private Object[] instanceVar3; /** * ...constructor Blah documentation comment... */ public Blah() { // ...implementation goes here... } /** * ...method doSomething documentation comment... */ public void doSomething() { // ...implementation goes here... } /** * ...method doSomethingElse documentation comment... * @param someParam description */ public void doSomethingElse(Object someParam) { // ...implementation goes here... } }
代码格式化
作用:深化Java的编码规范,达到代码风格统一
Eclipse中的Java Formatter
Indentation
缩进相关
Tab Policy(Space Only,4个缩进)
Braces
括号放在哪里(同一行)
White Space
空格出现在哪里
Blank Lines
空行出现在哪里
New Lines
什么情况下产生新行
Control Statements
控制语句的格式定义
Line Wrapping
控制折行格式
Comments
控制注释
Checkstyle
作用:保证Java的编码规范被正确实施
Eclipse集成Checkstyle插件
Javadoc Comments
Javadoc相关
配置
Package Html
是否每个包中存在package.html
Method Javadoc
方法的javadoc
Style Javadoc
javadoc的格式验证
Type Javadoc
类或接口的javadoc
Variable Javadoc
变量的javadoc
Naming Conventions
命名惯例
配置
Abstract Class Name
抽象类命名
Constants Name
常量名
Local Final Variable Name
本地final变量名
Local Variable Name
本地变量名
Member Name
成员变量名
Method Name
方法名
Package Name
包名
Parameter Name
参数名
Static Variable Name
静态变量名
Type Name
类或接口名
Headers
文件头检查
配置
Header
检查java源文件头
Regular Expression Header
利用正则表达式检查java源文件头
Cross Langurag Regexp Header
利用正则表达式检查任何源文件头
Imports
导入检查
配置
Avoid Star Imports
避免*导入
Illegal Imports
避免导入一些不合理的包,如sun.*,非100%纯java
Import Order Check
保证导入顺序
Redundant Imports
多余的导入
Unused Imports
未使用的导入
Import Control
控制包能导入什么
Size Violations
检查大小
配置
Anonymous inner class lengths
匿名内部类的长度
Executable Statement Size
限制可执行代码片段的长度
Maximum File Length
最大文件长度
Maximum Line Length
最大行长度
Maximum Method Length
最大方法长度
Maximum Parameter Length
最大参数长度
Whitespace
空白相关
配置
Empty For Initializer Pad
在初始化处是否需要空白,如:for的初始化处
Empty For Iterator Pad
在迭代处是否需要空白,如:for的迭代处
No Whitespace After
在某些符号后面没有空白
No Whitespace Before
在某些符号前面没有空白
Operator Wrap
当折行时,哪些操作符必须在新起一行
Method Parameter Pad
方法名和左括号中间是否有空白
Paren Pad
是否有空白在左括号和右括号之间
Tab Character
是否在源代码中有\t
Typecase Paren Pad
强制类型转换后面是否有空格
Whitespace After
检查分隔符后是否有空白,如:逗号后面有空格
Whitespace Around
检查分隔符周围是否有空白,如:等号前后有空格
Modifiers
修饰符相关
配置
Modifier Order
修饰符顺序
Redundant Modifier
多余修饰符
Blocks
代码块
配置
Avoid Nested Blocks
避免嵌套块
Empty Block
空块
Left Curly Brace Placement
左括号的位置
Need Braces
某些控制结构必须有括号
Right Curly Brace Placement
右括号的位置
Coding Problems
代码常见问题
配置
Avoid Inline Conditionals
避免内联条件
String a = getParameter("a"); String b = (a==null || a.length
Covariant Equals
检查定义的equals方法确实覆盖了Object的equals
Default Comes Last
default在switch的最后
Declaration Order Check
检查定义顺序
Double Check Locking
双检查锁
Empty Statement
空语句
Equals and HashCode
覆盖了equals也会覆盖hashCode
Explicit Initialization
明确初始化每一个变量
Fall Through
switch中的case在没有break或return等情况下,必须有注释
Final Local Variable
本地变量,如果值未改变,则定义成final
Hidden Field
变量间不存在隐藏
Illegal Instantiation
检查不合理的实例化,此处实例化可以用工厂方法代替
Illegal Catch
不合理的异常捕获
Illegal Throws
不合理的异常抛出
Illegal Tokens
检查非法的分隔符
Illegal Tokens Text
检查非法的分隔符的下个字符
Illegal Type
某些类应当从不用于定义类型、参数等
Inner Assignment
检查子表达式中是否有赋值操作
String s = Integer.toString(i = 2);
JUnit Test Case
junit的测试命名正确
Magic Number
无魔数
Missing Constructor
缺少构造函数
Missing Switch Default
switch缺少default语句
Modified Control Variable
更改了控制变量
for (int i = 0; i i++; }
Multiple String Literals
检查在一个文件中相同字符串出现多次
Multiple Variable Declaration
每个变量定义在单独一行
Nested If Depth
检查if的嵌套层次深度
Nested Try Depth
检查try的嵌套层次深度
Package Declaration
保证每个类都有一个包定义
Parameter Assignment
不允许对参数进行赋值
Redundant Throws
多余的异常抛出
Require This
引用本类的变量、方法时需要this
Return Count
限制return的数量
Simplify Boolean Expression
保证boolean表达式简单
Simplify Boolean Return
保证boolean返回值表达式简单
String Literal Equality
String的判等不使用==或!=
SuperClone
子类的clone中调用了super.clone()
SuperFinalize
子类的finalize调用了super.finalize()
Trailing Array Comma
数组初始化包括尾逗号
int[] a = new int[] { 1, 2, 3, };
Unnecessary Parentheses
不必要的括号
Class Design
类设计
配置
Design For Extension
检查类是否为扩展设计
Final Class
仅有private构造函数的类应定义为final类
Hide Utility Class Constructor
工具类不定义public构造函数
Interface Is Type
接口是类型,不能只定义常量,必须定义方法
Mutable Exception
保证异常类的所有成员是final的,是不可变类
Throws Count
限制抛出异常的数量
Visiblity Modifier
检查类成员的可见性
Duplicates
重复
配置
Strict Duplicate Code
重复检测
Metrics
代码质量度量
配置
Cyclomatic Complexity
圈复杂度
Non Commenting Soruce Statements
非注释源代码行数
Boolean Expression Complexity
限制布尔操作符的数量
Class Data Abstraction Coupling
其他的类在某一个类中实例的数量
Class Fan Out Complexity
一个类依赖其他类的数量
NPath Complexity
一个函数的可执行路径数
Miscellaneous
杂项
配置
Array Type Style
数组样式
C-Style:String args[]
Java-Style:String[] args
Descendent Token Check
Final Parameter
方法和构造函数的参数是final的
Generic Illegal Regexp
通过正则表达式检查一些代码问题
Indentation
检查缩进
New Line At End Of File
文件以一新行结束
Required Regular Expression
在代码中存在符合正则的代码
TODO Comments
检查TODO
Translation
检查属性文件是否缺少key
Trailing Comment
每个注释仅仅占一行
Uncommented Main
检查未注释无用的main方法
Upper Ell
Long被使用L而不是l来定义
Regexp
符合正则表达式,并且在代码中出现一定次数
J2EE
主要是相关于EJB的一些检查
Other
Checker
checkstyle配置的根,不能移除
TreeWalker
按照定义的属性检查java源文件
Filters
Severity Match Filter
根据event的严重性来决定audit events
Supression Filter
根据supression xml document,当check error时,压制audit events
Supression Comment Filter
使用某些注释格式来压制audit events
Checkstyle与Maven集成,并在CI时进行验证
pom.xml
... org.apache.maven.plugins maven-checkstyle-plugin 2.6 ... org.apache.maven.plugins maven-checkstyle-plugin 2.6 ... ... org.apache.maven.plugins maven-checkstyle-plugin 2.6 ... ...
mvn checkstyle:check