最近又搜罗整理了一些代码扫描规则,今天继续把这些扫描规则分享给老铁们,以后想学一些开发规则了,直接打开学一学就好了。不多说,直接上干货!

规则五、".equals()" should not be used to test the values of "Atomic" classes

AtomicInteger类和Integer类继承自Number类,但是在使用上有所同。AtomicInteger类是为了支持单个变量的线程安全和无需锁定而设计的。因此,一个AtomicInteger对象的".equals()"方法比较只有在跟自己比较的时候才会返回true。所以,对于比较它们的值是否相等,就应当使用AtomicInteger对象的”.get()“方法,进行取值比较。

这条规则适用于所有的atomic类对象,类:AtomicInteger,AtomicLong和AtomicBoolean。不示例规范:AtomicInteger a = newAtomicInteger(1);AtomicInteger b = newAtomicInteger(1);System.out.println(a.equals(b));//false规范示例:AtomicInteger a = newAtomicInteger(1);AtomicInteger b = newAtomicInteger(1);System.out.println(a.get() == b.get());//true

规则六:"=+" should not be used instead of "+="

"=+" 与 "=+" 意义不同,不应使用“=+”代替“+=”。a =+ b;虽然正确但写法不合规,应写成 a = +b;不规范示例:Integer a = -5;Integer b = 4;System.out.println(a =+ b);// 4规范示例:Integer a = -5;Integer b = 4;System.out.println(a += b);// -1

规则七、"@NonNull" values should not be set to null

标记为@NotNull或@NonNull的字段、参数或返回值,如果将值设置为null,或未能在构造函数中给字段赋值,并且在使用之前不进行非null检查,可能会在运行时导致NullPointerException。因此,标注非空注解的字段在使用前要进行非空判断。不规范示例:@NotNullpublicString indirectMix() {

String mix = null;

returnmix;// return value is Nonnull, but null is returned.}规范示例:@NotNullpublicString getName(String name) {

if(null!= name){

returnname;}

return"xiaoxiao";}

规则八、"compareTo" should not be overloaded

“compareTo”方法不可以重载。在实现Comparable.compareTo方法时,参数的类型必须与Comparable声明中使用的类型匹配,否则会有异常。示例:static classWorker1 implementsComparable {

@Overridepublic intcompareTo(Worker1 worker1) {

return this.age.compareTo(worker1.getAge());}

}

static classMan extendsWorker1 {

public intcompareTo(Man man){//参数类型应为Worker1

return this.age.compareTo(man.getAge());}

}

public static voidmain(String[] args) {

Worker1 worker = newWorker1(12);Worker1 worker1 = newWorker1(14);System.out.println(worker.compareTo(worker1));// -1Man man = newMan(11);Man man1 = newMan(15);System.out.println(man.compareTo(man1));// 异常}

规则九、"getClass" should not be used for synchronization

getClass()方法不应用于非final类中的同步,如果子类继承了该方法,子类与父类或其他类不同的对象做同步,同一时间可能会有多个线程进入代码块,虽然使用了synchronized关键字,但是也无法做到同步。不规范示例:public classWahh {

public voiddoSomethingSynchronized(){

// 子类继承此方法时不能做到同步synchronized(this.getClass()) {

// ...}

}

}规范示例:public classWahh {

public voiddoSomethingSynchronized(){

synchronized(Wahh.class) {// ...}

}

}

规则十、"notifyAll" should be used

notify()和notifyAll()都会唤醒休眠线程,但notify()只会唤醒一个线程,而notifyAll()则会唤醒所有线程。因为notify()可能无法唤醒正确的线程,所以应该使用notifyAll()。不规范示例:public classMyThread extendsThread{

@Overridepublic voidrun(){

synchronized(this){

...notify();...}

}

}规范示例:public classMyThread extendsThread{

@Overridepublic voidrun(){

synchronized(this){

...notifyAll();...}

}

}

本期的分享就到这里了,谢谢品读,希望您能有所收获。如果您有不同意见或者建议,欢迎回复评论。

JAVA如何代码静态检查术语_Sonar代码静态检查规则-JAVA篇(二)相关推荐

  1. Java程序验证五子棋先手必胜_五子棋的判断输赢规则 -- java编程(简单优化完整版)...

    五子棋的判断输赢规则代码 -- 完整优化版 一.前言 之前浏览过很多网上的方法,但总找不到比较完整,也get不到其他大神的思路,就直接画图分析,分析了之后就有了如下的代码,当然还想到更加优化的一种,只 ...

  2. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果...

    为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...

  3. idea2020shezhi代码检查级别_结合 CPU 理解一行 Java 代码是怎么执行的

    根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器.控制器.存储设备,以及输入输出设备,如下图所示. 我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单 ...

  4. java修饰静态_Java-static修饰符及静态代码块

    在java面向对象设计的类中,经常使用到static修饰符修饰变量,现在来看看static修饰符作用和特点 一:static修饰的变量可以直接通过类名.的方式直接调用 public class sta ...

  5. java中普通代码块,构造代码块,静态代码块的区别及代码示例

    本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...

  6. 提高你的Java代码质量吧:少用静态导入

    一.分析  从Java 5开始引入静态导入语法(import static),其目的是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序. 但是,滥用静态导入会使程序更难阅读,更难维护.静态导 ...

  7. Java(静态)变量和(静态)代码块的执行顺序

    为什么80%的码农都做不了架构师?>>>    本文讨论Java中(静态)变量.(静态)代码块的执行顺序 首先创建3个类: //1.Foo类,用于打印变量 public class ...

  8. java编译器代码检查_java 命名代码检查-注解处理器

    命名代码检查 根据 中第6.8节的要求, Java 程序命名应当符合下列格式的书写规范: 类 ( 或接口 ) : 符合驼式命名法, 首字母大写. 方法 : 符合驼式命名法,首字母小写 字段 :类或实例 ...

  9. 牛客网Java刷题知识点之什么是代码块、普通代码块、静态代码块、同步代码块、构造代码块以及执行顺序...

    不多说,直接上干货! 这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说代码块是不能单独运行的,它必须要有运行 ...

最新文章

  1. MyBatis Review——输入输出映射
  2. android自定义相机预览尺寸,相机在Android中,如何获得最佳尺寸,预览尺寸,图片尺寸,视图尺寸,图像扭曲...
  3. 中专学计算机毕业后的去向作文,中专生的毕业感言作文
  4. PyTorch随笔-2
  5. mysql 自定义函数
  6. 用OpenSSL写一个简单的Server/Client程序:证书与私钥
  7. mysql 优化关键字_MySQL 优化之 EXPLAIN 关键字
  8. 透明加密系统设计及实现-绪论
  9. 2020 年 6 月编程语言排行榜,Rust 第一次进入榜单前 20。
  10. 飞信机器人 ld-linux.so.2,基于linux的飞信机器人2010版安装
  11. 互联网行业的常用黑话,你知道几条?
  12. P1308 [NOIP2011 普及组] 统计单词数
  13. SDCC编译器简明使用教程
  14. 保持健康和活力 - 颈椎病康复指南
  15. 基于Springboot的学生信息管理系统
  16. 深入理解分布式技术 - 容器化技术
  17. 16、Mediator 仲裁者模式
  18. 服务器网络协议是什么,介绍网络协议,什么是网络协议三要素?
  19. 图像金字塔(Python实现)
  20. 三星gtn8010安卓7_三星平板N8000刷机升级安卓版本到7.1过程记录

热门文章

  1. 第十二章 Shell脚本编写及常见面试题(三)
  2. 手机游戏赚钱到底有多难?接入运营商或需一年
  3. 锐捷官方提供122套实验题.
  4. 文件的删除和文件信息的读取
  5. 莫烦Pytorch神经网络第四章代码修改
  6. 深入理解InnoDB(5)-文件系统
  7. leetcode 27. 移除元素(双指针)
  8. python示例_带有示例的Python功能指南
  9. 使用AxiosJavaScript中的简单HTTP请求
  10. kaggle比赛数据_表格数据二进制分类:来自5个Kaggle比赛的所有技巧和窍门