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();...}
}
}
本期的分享就到這里了,謝謝品讀,希望您能有所收獲。如果您有不同意見或者建議,歡迎回復評論。
總結
以上是生活随笔為你收集整理的JAVA如何代码静态检查术语_Sonar代码静态检查规则-JAVA篇(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息分发的同步均衡策略
- 下一篇: 安徽大学计算机教学平台c语言作业,安徽大