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

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

规则五、".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();...}

}

}

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

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

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

相关文章

【每日scrum】NO.5

进入冲刺第五天,软件的界面设计成为主打,收集学校的很多美图是我们组的任务; 问题在于软件已很难有很大的改进,大方向也都是变不了的转载于:https://www.cnblogs.com/wantong/p/4553003.html

Python Dataframe转List

1 from pandas import read_csv2 3 dataframe read_csv(rurl, nrows 86400, usecols [0,], enginepython)4 #nrows:读取行数,usecols[n,]:仅读取第n列,usecols[a,b,c]:读取a、b、c列5 dataset dataframe.values6 7 List []8 for k in dataset: 9 …

使用/proc/meminfo文件查看内存状态信息

在Linux下可以使用/proc/meminfo文件查看操作系统内存的使用状态# cat /proc/meminfo MemTotal: 16333852 kB MemFree: 1633564 kB Buffers: 212448 kB Cached: 4422808 kB SwapCached: 0 kB Active: 10343096 kB Inactiv…

java 简单图片浏览器_Java实现简单的图片浏览器

第一次写博客,不喜勿喷。最近一个小师弟问我怎么用Java做图片浏览器,感觉好久没玩Java了,就自己动手做了一下。学校的教程是用Swing来做界面的,所以这里也用这个来讲。首先要做个大概的界面出来,eclipse有一个很好用的…

60. Spring Boot写后感【从零开始学Spring Boot】

从2016年4月15日到2016年7月20日经历长达3个月的时间,【从零开始学习Spring Boot】系列就要告一段落了。国内的各种资源都比较乱或者是copy 来copy去的,错了也不加以修正下,导致通过百度找到的资源可能都是错误的,正是由于这么一种…

五角星

import turtle turtle.setup(600,400,0,0) turtle.bgcolor(red) turtle.color(yellow) turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(200)turtle.right(144) turtle.end_fill()turtle.done()转载于:https://www.cnblogs.com/Paris-YY/p/900…

java customerservlet_顾客管理系统java+servlet

首先我先搭好网页的框架先写一个登陆的html,名字是login.html1)在js中跳转页面的方法,我这里用的是get提交,只传递了一个name。function mylogin() {var usernamedocument.getElementById("name").value;window.location.href"…

php输出数据过大,PHPExcel导出数据量过大处理

转:ASP.NET MVC3 Model验证总结http://www.wyjexplorer.cn/Post/2012/8/3/model-validation-in-aspnet-mvc3 ASP.NET MVC3中的Model是自验证的,这是通 ...C++ 我想这样用(六)嗯,上一篇已经介绍了面向过程编程的语法知识,接下来是最后的…

计算球面上经纬度坐标方法比较

计算球面上的两点(坐标为经纬度)之间的距离可以直接通过公式计算得到,也可以先将经纬度坐标转化为墨卡托投影坐标来,然后用平面中两点之间的距离公式来计算。 在网上找了一些代码,然后简单进行了测试,发现前者精度更高: 资料来源&…

mysql给root开启远程访问权限,修改root密码

1.MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架构来说是没有问题的. 但随着网站流量的增加, 后期服务器架构可能会将 Web-Server 与 MySql-Server 分别放在独立的服务器上, 以便得…

Docker - Docker中搭建MySQL主从

1.pull完centos7纯净版的镜像后,创建容器,然后将宿主机上下载的MySQL文件 (MySQL下载地址:http://mysql.mirror.kangaroot.net/Downloads/) 拷贝到Docker容器中。 1) 抓取centos7纯净版镜像# docker pull registry.cn-hangzhou.aliyuncs.com/…

java 上传远程图片,java上传图片到另一台服务器上,怎么解决

Java codepublic String upload(String dir, FormFile formFile) throws Exception {Date date new Date();//取欲上传的文件的名字和长度String fname formFile.getFileName();//将上传时间加入文件名int i fname.indexOf(".");String name String.valueOf(date…

Qt_Window@Qt Command Prompt从命令行创建工程

#include <QApplication> #include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLabel *label new QLabel("Hello Qt!");label->show();return app.exec(); }第1 行和第2 行包含了两个类的定义&#xff1a;QApplicat…

linux中的守护进程

一、守护进程守护进程&#xff0c;也叫精灵进程&#xff08;daemon&#xff09;它和普通后台进程的区别在于以下三点1、守护进程自成会话&#xff0c;而普通后台进程则不一定2、守护进程不受终端的控制3、守护进程就是后台进程&#xff0c;而后台进程不同于守护进程用ps axj命令…

读取不同位置的配置文件

在开发和测试环境中&#xff0c;很容易混淆如何获取不同位置的配置文件。为了避免重复造轮子&#xff0c;在此记录一下自己的解决方案&#xff1a; 可以提出如下设想&#xff1a; 1、在开发环境下&#xff0c;读取resources下的config.properties文件    2、在生产环境下&a…

spring+log4j

Log4j是Apache的一个开放源代码项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;通过定义每一条…

mysql主从复制 lvs+ keepalived

2019独角兽企业重金招聘Python工程师标准>>> 一、环境 Master&#xff08;主机A&#xff09;&#xff1a;192.168.1.1 Slave&#xff08;主机B&#xff09; &#xff1a;192.168.1.2 W-VIP&#xff08;写入&#xff09; &#xff1a;192.168.1.3 R-VIP&#xff…

php 逗号编码,php有几种编码

当前 mbstring 模块支持以下的字符编码。这些字符编码中的任意一个都能指定到 mbstring 函数中的 encoding 参数。该 PHP 扩展支持的字符编码有以下几种&#xff1a;UCS-4*UCS-4BE (推荐学习&#xff1a;PHP视频教程)UCS-4LE*UCS-2UCS-2BEUCS-2LEUTF-32*UTF-32BE*UTF-32LE*UTF-…

34 丑数

把只包含因子2、3和5的数称作丑数&#xff08;Ugly Number&#xff09;。例如6、8都是丑数&#xff0c;但14不是&#xff0c;因为它包含因子7 。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数 Java: 1 public class Solution {2 public int GetUglyNumbe…

oracle 导入导出

oracle 导入导出 CREATE TABLESPACE LCZYM LOGGING DATAFILE G:\ZYM_DB\LCZYM.ora SIZE 1000M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; 导出 exp 用户名/密码数据库 file路径 owner用户名 logc:\orabackup\hkbfull.log 删除此用户所有对象 drop user emi…