欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自己收集的一些Checkstyle/PMD/Findbugs编码规范

程序员文章站 2022-05-24 22:33:58
...

自己收集的一些Checkstyle/PMD/Findbugs编码规范,或许对大家有点用自己收集的一些Checkstyle/PMD/Findbugs编码规范
            
    
    博客分类: 持续集成 javacheckstylepmdfindbugs 

1、 检查使用*号的导入,默认为全部类。
2、 检查多余的导入,如一个类导入了多次。
3、 检查没有使用的导入。
4、 检查是否有非法的包,缺省检查sun.*;对于某些包是不建议直接调用的。
5、 不需要在相同包中导入一个类。
6、 文件的最大行数,缺省为1500。
7、 每行的最大字符数,缺省为80。
8、 方法的最大行数,缺省为150。
9、 匿名类的最大行数,缺省为20。
10、 检查方法参数的最大个数,缺省为7。
11、 检查正确的缩进,不要使用tab键,并建议在提交代码前Format一下。
12、 类名应该以大写字母开头。
13、 方法名最好以小写字母开头。
14、 方法名中不要包含下划线。
15、 软件包的名称不要包含大写字符。
16、 避免过短的变量名。
17、 常量最好由大写与下划线组成。
18、 去掉或者注释掉无用的变量。
19、 抽象类命名为应该为 'AbstractXXX'。
20、 避免没有一个抽象方法的抽象类
21、 在代码中多次出现的字符串最好定义为常量。
22、 避免使用“final”局部变量,将它变成类变量。
23、 避免在循环语句中初始化新对象(new变量)。
24、 确保资源(像连接、声明和记录集) 在使用后总是关闭。
25、 避免“if (x != y) ..; else ..”表达。
26、 大量软件包的导入表明在对象中高度耦合,可以考虑重构。
27、 过长参数列可以表明应该创建一个新的对象来封装众多的参数。从根本上来说,尝试对参数进行集合。
28、 一个没有附带break声明的switch语句可能有缺陷。
29、 有太多类变量的类应被重新设计为含有少量的类变量,可能通过嵌套对象对信息归类 。
30、 重写equals方法的类也需要同时重写hashcode方法。
31、 双重IF语句可以通过&&来结合条件表达式。
32、 语句中if/finally/catch等块内容不可为空。
33、 避免抛出空指针异常。
34、 对于if/else/for等花括号应当另取一行。
35、 对于/**注释信息*/应该写为:/** 注释信息 */。
36、 文件末尾需要一个空行。
37、 每个包下提供一个package.html文件。
38、 一个少于3个分支的switch语句是低效率的,应使用if语句。
39、 返回参数为数组的不能直接返回null,应该返回空数组。
40、 在使用调用创建删除文件方法时,需要处理下返回结果。
41、 集合判断空与非空使用list.isEmpty() 代替 list.size()==0。
42、 StringBuffer在append单个字符时,使用单引号如sb.append(‘:’)。
43、 避免在循环结构中出现较复杂的逻辑,对循环体内容进行方法封装。
44、 通过提取公共方法来去除重复代码。
45、 类实现了Cloneable但没有定义或使用clone方法。
46、 Random对象应一次创建多次使用
47、 clone方法没有调用super.clone()。
48、 字符串比较使用equals代替==与!=。
49、 如果类定义了compareTo()但从java.lang.Object继承了equals(),如果equals方法返回true,则compareTo必须返回0;否则会发生不可预知的错误;即如下表达式必须成立:(x.compareTo(y)==0) == (x.equals(y))。
50、 Array不要调用了toString方法。
51、 在exception路径中,要关闭数据库资源。
52、 IO stream创建后没有在exception路径中close。
53、 方法名或包中其他参数仅有大小写的区别。
54、 序列化类的非临时性字段有非序列化的值。
55、 serialVersionUID字段应该是final的。
56、 serialVersionUID字段类型应该是long。
57、 serialVersionUID字段应该是static的。
58、 类是序列化的,但没有定义serialVersionUID字段。
59、 序列化类的父类没有定义无参的constructor。
60、 equals()比较不相关的类和接口。
61、 比较byte和超出-128到127范围的数字。
62、 类定义了equal(Object),但没有重载java.lang.Object的该方法。
63、 类定义了hashcode(),但没有重载java.lang.Object的该方法。
64、 检查一个不可能为null的值是否为null。
65、 字段重复赋值,例如:x = x = 17。
66、 无意义的计算方法,相同的字段进行计算(例:x&x or x-x)。
67、 匿名类定义了没有调用或重载的方法。
68、 加锁时方法调用Thread.sleep();建议使用wait()。
69、 日历对多线程使用是不安全的。
70、 装箱的原始类型值创建后立即转换为其他的原始类型(new Double(d).intValue()),建议直接使用(int) d这样的形式。
71、 装箱的原始类型创建仅为了调用 toString()。直接调用原始类型的toString方法。例如:new Integer(1).toString() 换为:Integer.toString(1)。
72、 直接使用Double.valueOf(double),而不是new Double(double)。
73、 不建议使用new String(String),直接适应String即可。
74、 字符串和空字符串比较,建议使用 String.length() == 0而不是String.equals("")
75、 字符串调用.toString() 是多余操作。
76、 在循环中字符串拼接使用StringBuffer而不是直接用字符串的+
77、 使用map的entrySet迭代器而不是keySet。
78、 Switch、if语句的几个分支完全相同。
79、 比较两个浮点数。因为浮点数计算可能会导致溢出,考虑使用固定精度例: BigDecimal。
80、 无用的整数比较,因为总是返回相同的值(例:x <= Integer.MAX_VALUE)。
81、 重复判断对象是否不空(前面已知肯定不空)。
82、 类实现了和父类相同的接口。