优化代码值得注意的一些小细节

最近在修改项目里一些代码违规问题,都是sonar检测出来的...很多问题都是重复出现...于是现在记录一些我觉得比较重要的和容易犯的问题.

日志

比如我用slf4j,那在类里应该这样声明private static final Logger LOGGER =  LoggerFactory.getLogger(XXXX.class)

private static final 3个修饰词都是不可以变的,缺一不可.

LOGGER是可以的,或者改成LOG,这2种是推荐写法.

在一些类中发现有人会这么写private final  Logger logger = LoggerFactory.getLogger(getClass())

这样是不规范的.也不必为每个类的实例都创建Logger类的对象

判断集合是否为空

判断集合是否为空的时候有人会这么写list.size() > 0

这样也是不规范的.规范的写法是list.isEmpty()

这样更简洁一些.

Long类型

如果有1个long值需要显示转化成Long对象,有人可能会这么做new Long(long)

这样不是最佳的选择,可以使用Long.valueOf(long)来代替,因为Long是有cache的.

可以参考 这篇文章

另外如果直接使用字面常量的话L是需要大写的,比如使用long num = 1L而不是1l

遍历Map

遍历map有很多种方式.我一直使用的是最简单的那种.

for(String key : map.keySet()){

    String value = map.get(key);

}

但是其实这样也是有问题的.是个效率问题,这样不如用Entry速度快

替代方法是

for(Map.Entry<String, String> entry : map.entrySet()){
    String value = entry.getValue();
    String key = entry.getKey();
}

字符串

有些时候需要拼接字符串,现在我想大家String一般是不会直接使用的,可能很多人会使用StringBuffer来代替.

这个时候应该要注意,如果拼接字符串是在方法的内部,StringBuffer是作为局部变量存在的,这个时候没有同步的问题,可以考虑使用StringBuilder来代替,取得更好的效率.

Tab与空格

在编码的建议使用空格代替tab,IDE可以将tab自动替换成空格,因为在不同环境下1个tab到底缩进多少可能有少许不同,但是空格是一样的..虽然我觉得tab比空格好使...因为鼠标可以更简单的定位代码...但是这条规则还是有一些道理的....

if

单个if也是需要些括号的,不然下次增加代码的时候会容易错.虽然eclipse可以格式化代码,方便检查,但还是写上去比较好

抛出异常

throw exception的时候sonar建议throw 你自己定制的exception而不是很高层的exception,可能这样更容易判断到底是什么错误吧.

字符串比较

这一点稍微有一些工作经验的朋友应该都知道,2个字符串比较的时候应该把常量写在前面.

因为字符串常量不会是null,而引用可能是会指向null的.这样做可以避免空指针异常.

方法参数

方法参数在方法的内部应该尽量避免修改,不然可能会影响方法外面的引用..

我个人觉得可以使用Converter来拷贝一份参数.

捕获异常

捕获异常以后要么记录这个异常,要么重新抛出它..而不是什么都不做..不然的话外层可能都不知道这里有异常.

就算在catch块中throw了一个新的异常,最好也能把旧的异常记录下来.不然相当于原本的案发现场就丢失了.

另外最好不要使用ex.printStackTrace();而是使用LOGGER去记录异常,这个道理和不要使用System.out.print还是使用LOGGER一样

字符串与数字比较

假如有1个字符串整数,想和1个数字做比较,可能有人会这么写.

Integer.valueOf(string) < 2000

这样其实多做了1次不必要的装箱与拆箱

valueOf方法会调用parseInt方法,而parseInt方法返回的是int,valueOf返回的是Integer所以会把int装箱成Integer.

然后进行比较,Integer与2000比较的时候又会拆箱成int.所以相当于多做了1次没用的装箱与拆箱.

可以考虑使用Integer.parseInt方法代替valueOf

返回类型为合集与数组的方法尽量避免返回null

如果可以的话可以考虑返回空的集合与数组代替返回null.

比如返回new ArrayList()而不是null

因为有些地方别人遍历数组与集合是采用foreach的形式而不是简单的for

这种情况下遍历null会直接抛出异常,而遍历空的集合与数组却不会.

以上大概就是我最近的一点体会~

时间: 2024-11-23 03:57:21

优化代码值得注意的一些小细节的相关文章

强壮你的C和C++代码30个小细节

1 初始化局部变量 使用未初始化的局部变量是引起程序崩溃的一个比较普遍的原因, 2 初始化WINAPI 结构体 许多Windows API都接受或则返回一些结构体参数,结构体如果没有正确的初始化,也很有可能引起程序崩溃.大部分Windows API结构体都必须有一个cbSIze参数,这个参数必须设置为这个结构体的大小. 注意:千万不要用ZeroMemory和memset去初始化那些包括结构体对象的结构体,这样很容易破坏其内部结构体,从而导致程序崩溃. 3 检测函数输入参数有效性 在函数设计的时候

写js代码的时候应该注意的一些的小细节

在今天将为大家分享一下,在平时我们写js代码的时候应该注意的一些的小点.img1全局变量了解js的朋友应该知道全局变量就是在任何函数的外面声明的或是未声明直接简单使用的.下面来看一个例子function fn(){var a=b=0;}或许有好多朋友都觉得这两个都是局部变量,但这似乎不是你所想的那样.在这个例子中b是一个全局变量.这是为什么了?肯定有好多朋友也想不通,这是因为在js中赋值运算符是自右往左的,所以上面这个例子实际上是function fn(){var a=(b=0);}因此,在平时

一些小细节可以看到优化的精髓

外链为王,内容为皇的说法在seo行业似乎已经成为了不变的定理,让众多行业人士忽略了网站结构的建设.外链.内容固然重要,但是不能厚此薄彼,网站设计也是大家不可忽略的部分. 1.404错误页面 基本上每个网站都有存在死链的情况,死链一般会出现在删除某一篇内容或产品之后,导致搜索引擎无法访问原来的链接,这样的链接称为死链.一个网站死链如果太多会让蜘蛛产生反感的情绪以至于不再抓取网站内容,要解决网站死链问题设置404页面很重要,通过404页面的引导可以让蜘蛛爬取别的内容,同时也不会导致用户流失.如果不会

9行代码体现集合框架中的一个小细节

String[] strs = {"string--01", "string--02", "string--03", "string--04"};List<String> strsList = Arrays.asList(strs);//以下语句输出:[string--01, string--02, string--03, string--04]System.out.println(strsList); int[]

SEO之优化代码

Meta标签:如果要做的非常简单,meta标签只需要设置一个字符编码就可以了,咱们在任意地方购买的模版都会写上字符编码,另外Title标题.关键词.Description描述这里也列为meta标签去优化,这三个地方,一半在模版中会直接调用到后台,可以直接在后台设置,所以代码上需要基本是不需要操作. CSS/JS引用:在我们购买到网站模版后,大多数的网站均是调用JS或CSS的,这里需要主意的是最好使用绝对路径调用JS/CSS,如下所示: <LINK rel=stylesheet type=text

Android开发中的性能优化---代码

前 这篇主要总结一些优化代码的技巧,一些写代码中的小细节,可能就会影响程序的执行效率,比如一个地方只会影响1ms,那么1000个地方就会影响1s,1s到底长不长?要知道Activity出现ANR异常的时间为5s!!!  主要遵循两个原则  1.不要创建一些没必要创建的对象以及重复定义某个变量  对象的创建是一个非常繁琐的步骤,JVM首先会对通过new指令对符号进行解析,以此来判断该类是否被加载,然后在堆中进行内存分配,为对象分配完内存空间后,就会对内存区域进行初始化(该为0的为0,该为null的

关于if语句中的小细节

if语句都会用,但是有一些小细节并不容易被发现. 比如我们不应该写这样的代码: if(flag==0) flag为布尔变量,布尔变量的值为真或假,用0表示假,真是多少是不一样的. 所以我们应该避免将布尔变量与0或1这样的整型值进行比较. 那么我们也不应该写这样的代码: if(i) i为一个整型变量,但是写成上面那样就会被人误以为是布尔值,良好的编程习惯是这样的: if(i==0)或if(i!=0) 还有重要的一点是,我们不能将float型和double型数据与0这种整型变量进行==或!=. 因为

注意编码工作中的小细节

人们常说"细节决定成败". 编码工作中,同样需要关注细节. 本文将给出3个小实例来说明编码中关注细节的重要性,同时给出作者对如何注意编码细节的一点见解(说的不对,请指正). 例1 这个问题如此地显而易见,竟然没有被发现. List<int> numList = new List<int>(); numList.Add(3); numList.Add(1); numList.Add(4); numList.Add(2); numList.Add(5); numLi

Android 性能优化:使用 Lint 优化代码、去除多余资源

读完本文你将了解到: 前言 什么是 Lint Lint 工作方式简单介绍 从命令行运行 Lint Android Studio 中使用 Lint 团队中建立代码规范利器提升降低问题的等级 Lint 虽好也不能贪杯 在 Java 代码中忽略 Lint 警告 在 XML代码中忽略 Lint 警告 Gradle 中配置 Lint 自动删除查找出来的无用资源文件 总结 Thanks 前言 在保证代码没有功能问题,完成业务开发之余,有追求的程序员还要追求代码的规范.可维护性. 今天,以"成为优秀的程序员&