java 代码冲突检测

在工作中,最近我对现有Java项目进行了代码清理。 完成该练习后,我可以看到在代码中一次又一次地发生了一组常见的代码冲突。 因此,我想出了此类常见违规的清单,并与同行共享,以提高安全意识,有助于提高代码质量和可维护性。 我在这里将清单分享给更多的听众。

该列表不是按任何特定顺序排列的,而是从所有代码质量工具(如CheckStyle , FindBugs和PMD)强制执行的规则中得出的。

开始了!

在Eclipse中格式化源代码并组织导入:

Eclipse提供了自动格式化源代码和组织导入(从而删除未使用的导入)的选项。 您可以使用以下快捷键来调用这些功能。

  • Ctrl + Shift + F –格式化源代码。
  • Ctrl + Shift + O –组织导入并删除未使用的导入。

您可以让Eclipse在保存文件时自动格式化和自动组织,而不必手动调用这两个函数。 为此,在Eclipse中,转到窗口->首选项-> Java->编辑器->保存操作 ,然后启用在保存时执行选定的操作并选中格式化源代码 + 组织导入避免方法中的多次返回(退出点):

在您的方法中,请确保只有一个出口点 。 在方法主体中不要在多个地方使用return。

例如,下面的代码是不推荐的,因为它有一个以上的退出点(返回语句)。

private boolean isEligible(int age){if(age > 18){return true;}else{return false;}
}

上面的代码可以这样重写(当然,下面的代码仍可以改进,但是稍后会介绍)。

private boolean isEligible(int age){boolean result;if(age > 18){result = true;}else{result = false;}return result;
}


简化if-else方法:

我们编写了几种实用程序方法,这些方法采用一个参数,检查某些条件并根据条件返回一个值。 例如,考虑上一点中刚刚看到的isEligible方法。

private boolean isEligible(int age){boolean result;if(age > 18){result = true;}else{result = false;}return result;
}

整个方法可以重写为单个return语句,如下所示。

private boolean isEligible(int age){return age > 18;
}


不要创建布尔,整数或字符串的新实例:

避免创建Boolean,Integer,String等新实例。例如,不要使用new Boolean(true) ,而应使用Boolean.valueOf(true) 。 后面的语句具有与前一个语句相同的效果,但是它提高了性能。

在块语句周围使用花括号。

永远不要忘记在块级语句周围使用花括号,例如ifforwhile 。 这样可以减少代码的歧义,并避免在修改块级语句时引入新错误的机会。

不建议

if(age > 18)result = true;
elseresult = false;

推荐的

if(age > 18){result = true;
}else{result = false;
}


在适用的情况下,将方法参数标记为最终参数:

在适用的情况下,始终将方法参数标记为最终参数。 如果这样做,不小心修改了参数的值,则会收到编译器警告。 而且,它使编译器可以更好地优化字节码。

推荐的

private boolean isEligible(final int age){ ... }


在大写字母中命名公共静态最终字段:

始终在大写中命名公共静态最终字段(也称为常量 )。 这使您可以轻松地区分常量字段和局部变量。

不建议
public static final String testAccountNo = '12345678';

推荐的
public static final String TEST_ACCOUNT_NO = '12345678';

将多个if语句合并为一个:

尽可能将多个if语句合并为一个。

例如下面的代码;

if(age > 18){if( voted == false){// eligible to vote.}
}

可以组合为单个if语句,例如:

if(age > 18 && !voted){// eligible to vote
}


开关应该具有默认值

始终为switch语句添加默认大小写。

避免重复的字符串文字,而是创建一个常量:

如果必须在多个地方使用字符串,请避免将其用作文字。 而是创建一个String常量并使用它。

例如,从下面的代码中,

private void someMethod(){logger.log('My Application' + e);........logger.log('My Application' + f);
}

字符串文字“ My Application”可以制成常量,并在代码中使用。

public static final String MY_APP = 'My Application';private void someMethod(){logger.log(MY_APP + e);........logger.log(MY_APP + f);
}


其他资源:

  • Java最佳实践的集合。
  • 可用Checkstyle检查的列表。
  • PMD规则集列表

参考:我们的JCG合作伙伴 Veera Sundar博客上的Java常见Java代码违规 。

翻译自: https://www.javacodegeeks.com/2012/09/common-code-violations-in-java.html

java 代码冲突检测

java 代码冲突检测_Java中常见的代码冲突相关推荐

  1. java构造块_java中的静态代码块、构造代码块、构造方法详解

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  2. 什么是java的关键字_java中常见的关键字

    什么是关键字呢? 概述:关键字就是在java语言中赋予特殊含义的单词 特点:1.组成的关键字的单词全是小写 2.常见的代码编辑器中,对关键字都有特殊的颜色标记 比如在idea中对关键字都有特殊的颜色标 ...

  3. java list 结构_Java中常见数据结构List之ArrayList

    这里主要包含ArrayList和LinkedList. 关于Java中的集合内容, 感觉都已经被写烂了, 我这里主要是做个复习, 再从扒下源代码, 尽量用最直白的语言把里面的核心内容记录下来.仅此而已 ...

  4. java jdbc连接 代码块_java 中JDBC连接数据库代码和步骤详解及实例代码

    •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的 ...

  5. java util 排序_Java中常见的排序方法

    本博主要介绍Java中几种常见的排序算法: /* 排序方法的演示 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分 ...

  6. java异常类_java中常见的异常类

    展开全部 从异常类的继承架构图中可以看出:Exception 类扩展出数个子类,其中 IOException.RunntimeException 是较常用的两种. 习惯上将 Error 与 Excep ...

  7. java 字符串掐头去尾_java中常见的类

    简介 类层次结构最顶层的基类,所有类都直接或间接继承自Object类,所以,所有的类都是以恶个Object(对象) 构造方法 Object: 构造一个对象,所有子类初始化时都会优先调用该方法 常用的成 ...

  8. java 文件追加 变大_用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊?...

    用java写在doc中追加内容代码时,为什么它只能写入一次内容,后面都只是增加文件的大小,不增加内容啊? 答案:1  信息版本:手机版 电脑版 解决时间 2020-07-02 16:34 已解决 20 ...

  9. Java中常见的代码冲突

    在工作中,最近我对现有Java项目进行了代码清理. 完成该练习后,我可以看到在代码中一次又一次地发生了一组常见的代码冲突. 因此,我想出了此类常见违规的清单,并与同行分享,以使人们有意识地提高代码质量 ...

最新文章

  1. 【AHOI 2016初中组】 自行车比赛 - 贪心
  2. JavaSript模块化 AMD CMD 详解.....
  3. 用什么tricks能让模型训练得更快?先了解下这个问题的第一性原理
  4. [SecureCRT]通过SFTP方式上传本地文件到服务器
  5. 安装cockpit通过nginx代理访问
  6. Spring MVC Hibernate MySQL集成CRUD示例教程
  7. 编译exe不弹窗口_详解matlab mbuild -setup找不到C++编译器解决方案
  8. IMDB-WIKI人脸属性数据集解析,dob matlab序列号转为出生日期
  9. Kali系统学习:弱点扫描工具NMAP实战演示
  10. java求两个数的最小公倍数的方法_Java程序查找两个数字的最小公倍数
  11. 如何用python画帆船_简单几步,100行代码用Python画一个蝙蝠侠的logo
  12. 肿瘤浸润免疫细胞量化分析简介
  13. pads2007版本pcb导出的dxf在cad中打不开,提示“DXF 输入无效或不完整 -- 图形被放弃”
  14. NODE_多文件上传
  15. 华为设备常用软件包名
  16. sip是什么?Mac电脑如何关闭sip?关闭系统完整性保护SIP的方法教程
  17. linux0.11内存memory.c一些函数的简单的注释(一)
  18. 美容行业竞争分析:2022年大型美容院成为市场主流
  19. CANFiber是什么?
  20. web开发从入门到精通一(详细)

热门文章

  1. ByteBuffer的使用
  2. 架构师必须搞懂DNS,一篇文章就够了。
  3. 区块链在阿里巴巴天猫中的应用
  4. ‘小会计’的转行之旅
  5. 进入ASP .net mvc的世界
  6. 2017蓝桥杯省赛---java---C---1(外星日历)
  7. 2016蓝桥杯省赛---java---B---3(凑算式)
  8. 登录系统 提示框_实物资产管理软件操作手册(职员和系统用户)
  9. 转:权限管理——用户认证和用户授权
  10. review_core_basic_java(1)java程序设计概述