摘要:作者Veera Sundar在清理代码工作时发现一些常见的违规编码,因此,Veera Sundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性。

最近,我给Java项目做了一次代码清理工作。经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)重复出现在代码中。因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java爱好者提高代码的质量和可维护性。

这份列表没有依据任何规则或顺序,所有的这些都是通过代码质量工具包括CheckStyle,FindBugs和PMD检查出。一起来看下:

一、Eclipse编译器提供源代码格式输入

Eclipse提供自动源码格式选项,并且组织输入(删除未使用的代码)。你可以使用下面的这些快捷键进行操作。

Ctrl + Shift + F——源代码格式

Ctrl + Shift + O——组织输入并删除未使用的代码

代替手动调用这两个函数,只需根据Eclipse自动格式和自动组织选项,可以随时保存文件。

操作步骤,在Eclipse中进入Window -> Preferences -> Java -> Editor -> Save Actions,然后以选定的方式保存,最后检查Format source code + Organize imports。

二、避免多个返回(退出点)

依照你的方法,确保只有一个退出点。不要在同一个地方或多个地方使用返回。比如,下面的代码,NOT RECOMMENDED(不建议),这是因为有多个退出点(返回语句)。


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创建新的实例

避免给Boolean,Integer,String创建新的实例。比如,使用new Boolean(true),Boolean,valueOf(true)。修改后的语句与之前的效果基本相同,除了在性能上有所提升。

五、使用大括号模块语句

永远别忘了使用大括号模块语句比如if、for、while。这样做的好处是当你在修改模块级语句时减少了模糊代码并且避免引进bug的机会。

不建议:


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

建议:


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

六、以final类型标记方法参数,任何时候都适用

请记住,以final类型标记方法参数,任何时候都适用。这样做的好处在于当你不小心修改参数值时,编译器会给你警告,同时它还能以更好的方式优化编译器代码字节。

建议:


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

七、在UPPERCASE中命名public static final字段

在UPPERCASE中命名public static final字段(通常也被称之为常量)。这个可以让你轻松区分常量字段和局部变量之间的不同。

不建议:


public static final String testAccountNo = "12345678";

建议:


public static final String TEST_ACCOUNT_NO = "12345678";

八、组合成单一的if语句

在尽可能多的情况下,把多个if语句组合成单一的if语句,比如下面的代码:


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

合并成单一的if语句:


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

九、Switch应该有default

始终给Switch语句添加default。

十、使用常量来避免重复定义相同的字符串值

如果你在多个地方必须使用字符串,那么使用常量来避免重复定义拥有相同值的字符串。

比如,看下面的代码:


private void someMethod(){ logger.log("My Application" + e); .... .... logger.log("My Application" + f); } string literal“我的应用”可以作为常量并且能在代码中使用。 public static final String MY_APP = "My Application"; private void someMethod(){ logger.log(MY_APP + e); .... .... logger.log(MY_APP + f); }

Java中十个常见的违规编码的更多相关文章

  1. Java学习之道:Java中十个常见的违规编码

    近期,我给Java项目做了一次代码清理工作.经过清理后,我发现一组常见的违规代码(指不规范的代码并不表示代码错误)反复出如今代码中.因此,我把常见的这些违规编码总结成一份列表,分享给大家以帮助Java ...

  2. JAVA中字符串常见操作

    String str1="hello,world";String str2="Hello,World"; 1.字符串的比较:例,System.out.print ...

  3. Java 中最常见的 5 个错误

    在编程时,开发者经常会遭遇各式各样莫名错误.近日,Sushil Das 在 Geek On Java上列举了 Java 开发中常见的 5 个错误,与君共「免」. 原文链接:Top 5 Common M ...

  4. java中字符与字节的编码关系

    在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉字字符存储需要2个字节. 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节. ...

  5. java中各种常见的异常

    一.各种常见的异常 在上一节中程序如果你注意留意,程序抛出的异常是:java.lang.ArithmeticException.这个异常是在lang包中已经定义的.在lang包中还定义了一些我们非常常 ...

  6. Java中处理接口返回base64编码的图片数据

    在做接口测试的时候,某些接口返回的content是一大段加密文字.这种情况下,有可能是返回的图片加密数据,需要将这些数据转换成图片进行保存查看. 例如: 这里,可以看到Content对应的键值开头有“ ...

  7. java中获取本地文件的编码

    import java.util.*; public class ScannerDemo { public static void main(String[] args) { System.out.p ...

  8. java中不常见的keyword:strictfp,transient

    1.strictfp, 即 strict float point (精确浮点). strictfp keyword可应用于类.接口或方法.使用 strictfp keyword声明一个方法时,该方法中 ...

  9. Java中部分常见语法糖

    语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身功能来说没有什么影响,只是为了方便程序员的开发,提高开发效率.说白了,语法糖就是对现有语法的一 ...

随机推荐

  1. 【Udacity并行计算课程笔记】- Lesson 2 The GPU Hardware and Parallel Communication Patterns

    本小节笔记大纲: 1.Communication patterns gather,scatter,stencil,transpose 2.GPU hardware & Programming ...

  2. ubuntu “下列的软件包有不能满足的依赖关系” 问题

    前阵子,刚安装Ubuntu时,安装vim的问题,现在些出来分享一下. apt-get install vim 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 ...

  3. C# ASP.NET MVC 配置允许跨域访问

    在web.config文件中的 system.webServer 节点下 增加如下配置 <httpProtocol> <customHeaders> <add name= ...

  4. 【工具测试】Acunetix 11-登录后扫描的功能

    1.概要 在测试的过程中,会给一些只有登录口的测试站点,只有登录后才能访问更多的页面. Acunetix 11的登录后扫描功能摸索了老半天,原来这么神奇.学习了! 2.操作 登录之后 - [Add T ...

  5. 005_nginx414_nginx 414 Request-URI Too Large

    一.开发请求一个非常长的请求参数 https://jiaju.jyall.me/backend/dish/getSales/?dishId=167271&dishId=166975&d ...

  6. pom.xml的第一行报错

    第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...

  7. 转:vue+element实现树形组件

    项目中需要用到树形组件,在网上发现一个用vue+element实现的树形组件,现在记录下: demo地址:https://github.com/wilsonIs/vue-treeSelect

  8. Android 截屏与 WebView 长图分享经验总结

    最近在做新业务需求的同时,我们在 Android 上遇到了一些之前没有碰到过的问题,截屏分享. WebView 生成长图以及长图在各个分享渠道分享时图片模糊甚至分享失败等问题,在这过程中踩了很多坑,到 ...

  9. CSS三:CSS的三种引入方式

    CSS的引入方式共有三种:行内样式.内部样式表.外部样式表. 一.行内样式 使用style属性引入CSS样式. 示例:<h1 style="color:red;">st ...

  10. 洛谷p1072 gcd,质因数分解

    /* 可以得a>=c,b<=d,枚举d的质因子p 那么a,b,c,d,x中包含的p个数是ma,mb,mc,md,mx 在gcd(a,x)=c中 ma<mc => 无解 ma=m ...