日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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篇(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。