java 代码冲突检测_Java中常见的代码冲突

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 代码冲突检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 编译mysql_Ubuntu编译MySQL5

编译MySQL5源码提示 No curses/termcap library found,但安装curses termcap都提示已经安装。编译时加上路径即可解决,即./conf编译MySQL5源码提示 No curses/termcap library found,但安装curses termcap都提示已经安装。编译时加上路径即可…

WIN7下搭建FTP

步骤如下: 一、 二、 三、 四、 五、 六、 七、 八、 九、检验 注意:只有本机可以访问ftp,外部电脑无法访问ftp?可能是防火墙未关闭。

Android调用系统拍照裁剪和选图功能

最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照private fun openCamera() { //调用相机拍照// 创建File对象,用于存储拍照后的图片var outputImage File(externalCacheDir, "output_image.jpg")try {if (outputI…

忘记番石榴:5个Google库Java开发人员应该知道的

什么是最有用但未知的Google Java库? 如果我们在激烈的黑客马拉松中阻止某人并要求她命名一个受欢迎的Google Java库,那么答案可能就是Guava。 这也就不足为奇了,因为它的主要重点是提高开发人员的生产力。 但是其他Google图书馆呢&#xff…

VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...

我们来编译配置qt的mysql数据库驱动,首先看看官方文档的说明,如下How to Build the QMYSQL Plugin on WindowsYou need to get the MySQL installation files.RunSETUP.EXEand choose "Custom Install".Install the "Libs & Include …

JAVA知识学习——类的修饰符

Java程序在定义类时,除了使用class关键字标识之外,还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类。修饰符之间的先后排列次序对类的性质没有任何影响。一,非访问修饰符。 1…

神秘的数组初始化_I / O神秘化

神秘的数组初始化由于对高度可扩展的服务器设计的所有炒作以及对Node.js的狂热,我一直想重点研究IO设计模式,直到现在为止都没有足够的时间进行投资。 现在已经做了一些研究,我认为最好记下我遇到的东西,作为对我以及可能遇到这篇…

mysql characteristic_MySQL存储过程定义中的特性(characteristic)的含义

MySQL的存储过程蛮啰嗦的,与MSSQL或者Oracle的存储过程相比,如果没有显式指定,他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程通常在使用图形界面工具进行存储过程编写的时候,图形界面工具会自动加上这部分内容…

hive 案例分析

转自 http://www.cnblogs.com/guanhao/p/5641675.html 1. 创建数据库,切换数据库 create database testdb2; use testdb2; 2. 创建管理表 create table emp( empno int, empname string, job string, mgr int, hiredate string, salary double, comm double, deptn…

BeanUtils包的使用

BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作。 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1) BeanUtils相关包 commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanuti…

使用JMX作为Ganglia的现代替代品进行CLDB监视

有许多选项可用于监视MapR集群的性能和运行状况。 在本文中,我将介绍使用Java管理扩展(JMX)监视CLDB的鲜为人知的方法。 据最受尊敬的MapR数据工程师之一,Akihiko Kusanagi称,与使用Ganglia相比,使用JMX来…

python 多线程并发怎么还是顺序执行_python thread 并发且顺序运行示例

python怎么实现用多线程顺序执行python 的GIL规定每个时刻只能有一个线程访问python虚拟机,所以你要用python的多线程来做计算是很不合算的,但是对于IO密集型的应用,例如网络交互来说,自己把自己说服了,是一种理智的胜利;自己被自己感动了,是…

markdown pad激活

<iframe src"https://cn.calcuworld.com/%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6%e8%ae%a1%e7%ae%97%e5%99%a8?iframe1" width"100%" height"400"></iframe> ---恢复内容开始--- 注册码 Soar360live.com GBPduHjWfJU1mZqcPM3BikjYKF…

Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?

在最初的 http 协议中&#xff0c;没有上传文件方面的功能。RFC1867&#xff08;"Form-based File Upload in HTML".&#xff09; 为 http 协议添加了这个功能。客户端的浏览器&#xff0c;如 Microsoft IE, Mozila, Opera 等&#xff0c;按照此规范将用 户指定的文件…

pytest单侧模块_入门汇总

Pytest简单介绍 &#xff08;pytest是python的一个测试框架&#xff0c;主要是用来进行一些小的测试&#xff09; 安装&#xff1a;pip install -U pytest查看是否安装成功&#xff1a;pytest --version运行&#xff1a;在当前文件所在目录下执行pytest&#xff0c;会寻找当前目…

pythonreshape函数三个参数_详解numpy.ndarray.reshape()函数的参数问题

我们知道numpy.ndarray.reshape()是用来改变numpy数组的形状的&#xff0c;但是它的参数会有一些特殊的用法&#xff0c;这里我们进一步说明一下。代码如下&#xff1a;import numpy as npclass Debug:def __init__(self):self.array1 np.ones(6)def mainProgram(self):print(…

javafx 和swing_集成JavaFX和Swing

javafx 和swing我刚刚完成了对使用Swing的应用程序组件的重写&#xff0c;现在正在使用JavaFX&#xff0c;最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序&#xff0c;重写花了我一段时间&#xff0c;最后一切都很好&#xff0c;我很高兴自己做到了…

servlet.jar--jar not loaded错误

出错信息&#xff1a;validateJarFile(D:\Program Files\apache-tomcat-6.0.29\webapps\BookShop\WEB-INF\lib\servlet.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 造成这种错误的原因有两个&#xff1a;serv…

练习6.6

6.6&#xff1a;说明形参、局部变量以及局部静态变量的区别。编写一个函数&#xff0c;同时用到这三种形式。 Ans&#xff1a;形参及函数体内定义的变量&#xff0c;都是局部变量&#xff0c;必须进行初始化&#xff0c;否则会出现未定义行为&#xff0c;这是由于局部变量的生命…

java map 最大值_MAP集合选出最大值

import java.util.Arrays;import java.util.HashMap;import java.util.Map;import org.junit.Test;public class TestHashMap {//统计各空气质量的最高值Testpublic void test1(){String pm25 "农展馆423,东四378,丰台花园406,天坛322,海淀区万柳398," "官园40…