sonar代码审查问题总结

主要问题列表:

问题 (格式:问题名字+问题出现的次数) 解释 补充说明
Resources should be closed2 Java's garbage collection cannot be relied on to clean up everything. Specifically, connections, streams, files and other classes that implement theCloseableinterface or it's super-interface,AutoCloseable, must be manually closed after creation. Failure to do so will result in a resource leak which could bring first the application and then perhaps the box it's on to their knees. 资源未关闭,打开发现有两处用到的 IO 流没有关闭。
Conditions should not unconditionally evaluate to "TRUE" or to "FALSE"1 if/else判断里出现了重复判断,比如在if(a>10)的执行体里面又判断if(a<0),而后者肯定不会是true
Exception handlers should preserve the original exception13 处理异常的时候应该保留原始的异常情况,不要直接来个catch(Exception e)了事。
Throwable.printStackTrace(...) should not be called7 不应该直接调用e.printStackTrace(),而是用Loggers来处理(就是打Log)。Loggers的优势是:Users are able to easily retrieve the logs.The format of log messages is uniform and allow users to browse the logs easily.
Instance methods should not write to "static" fields6 不要用实例方法改变静态成员,理想情况下,静态变量只通过同步的静态方法来改变。
"public static" fields should be constant1 公共静态成员应该加上final,也就是public static final一般不分家。
Thread.run() and Runnable.run() should not be called directly1 不应该直接调用ThreadRunnable对象的run方法,直接调用run会使得run方法执行在当前线程,失去了开启新线程的意义。但有时候可能会这样做,见例子。
Generic exceptions should never be thrown1
Class variable fields should not have public accessibility64 类变量不要设置为public,而是设为private,再提供getset方法。
Sections of code should not be "commented out"30 不要再注释中出现大量的代码段,会使代码可读性变差。
Package declaration should match source file directory19
Utility classes should not have public constructors16 工具类不应该有公共的构造器,也就是说至少要有一个private的构造器,如果没有,默认的构造器是public的。
The diamond operator ("<>") should be used12 在定义集合的时候,等号右边的<>内不需要再写上元素类型,直接空着就行。 正确的顺序如下所示:
静态成员变量→成员变量→构造器→方法
Lambdas and anonymous classes should not have too many lines9 Anonymous classes and lambdas (with Java 8) are a very convenient and compact way to inject a behavior without having to create a dedicated class. But those anonymous inner classes and lambdas should be used only if the behavior to be injected can be defined in a few lines of code, otherwise the source code can quickly become unreadable.anonymous class number of lines : at most 20 Lambdas 表达式和匿名内部类不要写太多行,一般最多写20行。
Anonymous inner classes containing only one method should become lambdas8 只包含一个方法的匿名内部类应该写成 Lambdas 表达式的形式,增强代码可读性。
Try-with-resources should be used8 Try-with-resources的形式取代try/catch/finally的形式。
Methods should not be empty7 不要写空方法,除非这种情况:An abstract class may have empty methods, in order to provide default implementations for child classes.
Source files should not have any duplicated blocks7 源文件中不要出现任何重复的代码段或行或字符串等。
"switch case" clauses should not have too many lines6 switch case 每个case里面的代码不要太长,太长的话可以考虑写个方法代替,主要是为了增强代码可读性。
Nested blocks of code should not be left empty6 嵌套代码块不要是空的,比如 if( a > 0 )<> { doSomething() } else { },这时候应该把后面的else{}去掉。
Methods should not be too complex6 方法不要太复杂,否则难以理解和维护。
Unused private fields should be removed5 没有使用的private的成员变量应该移除掉。
Dead stores should be removed5 没有用到的本地变量或其他死存储应该移除掉,也就是写方法的时候,定义的变量如果后来发现根本用不到,要记得删掉那行代码。
"switch" statements should end with a "default" clause4 switch语句应该以default结束,这是一种defensive programming思想。
Unused method parameters should be removed4 没有用到的方法参数应该移除掉。
Control flow statements "if", "for", "while", "switch" and "try" should not be nested too deeply4 if/for/while/try这样的嵌套不要太复杂。
Useless parentheses around expressions should be removed to prevent any misunderstanding3 没有意义的括号不要随便加,以免造成误解,比如"="两边对象类型是相同的,就不要强转。
"for" loop stop conditions should be invariant3 for循环的结果条件不能是变量,而应该是常量。
"static" members should be accessed statically2 static成员是与类、静态方法相联系的。
Catches should be combined2
Primitives should not be boxed just for "String" conversion2 不要使用 4+这样的方式将int值转变为字符串,而是使用Integer.toString(4)这样的方式。就像Integer.parseInt("我是字符串")这样,不要偷懒。
Classes should not be empty2 不要写空类。
Unused local variables should be removed2 没有用到的本地变量要删掉。
"entrySet()" should be iterated when both the key and value are needed2 直接看英文更直接:When only the keys from a map are needed in a loop, iterating the keySet makes sense. But when both the key and the value are needed, it's more efficient to iterate theentrySet, which will give access to both the key and value, instead. 也就是说,如果只需要MapKey,那么直接iterate这个MapkeySet就可以了,但是如果Keyvalue都需要,就iterate这个Map
Method parameters, caught exceptions and foreach variables should not be reassigned2 方法参数/捕获的异常/foreach的变量不应该被重新赋值。
Collection.isEmpty() should be used to test for emptiness2 当判断集合是否为空的时候,不要使用if (myCollection.size() == 0) 这样的方式,而是使用if (myCollection.isEmpty()这样的方式,后者性能更高。
Standard outputs should not be used directly to log anything2 标准输出不直接打印任何东西,也就是打log的时候,不要使用System.out.println("My Message")这样的方式,而是使用logger.log("My Message")这种方式。
Generic wildcard types should not be used in return parameters1 通配符不应该出现在返回声明中。比如这句:List <? extends Animal>getAnimals(){...}, 我们无法知道“是否可以把a Dog, a Cat 等加进去”,等之后用到这个方法的时候,我们没必要去考虑这种问题(前面引号里面的)。
Synchronized classes Vector, Hashtable, Stack and StringBuffer should not be used1 不要使用同步的Vector/HashTable/Stack/StringBuffer等。在早期,出于线程安全问题考虑,Java API提供了这些类。但是同步会极大影响性能,即使是在同一个线程中使用他们。通常可以这样取代:ArrayList or LinkedList instead of Vector,Deque instead of Stack,HashMap instead of Hashtable,StringBuilder instead of StringBuffer.
Exit methods should not be called 尽量不要调用system.exit()方法。
Local Variables should not be declared and then immediately returned or thrown7 本地变量如果赋值之后直接return了,那就直接return本地变量的赋值语句。
Field names should comply with a naming convention6 命名要规范。
Local variable and method parameter names should comply with a naming convention6 命名要规范。
String literals should not be duplicated5 字符串不应该重复,如果多次用到同一字符串,建议将该字符串定义为字符串常量,再引用。
Return of boolean expressions should not be wrapped into an "if-then-else" statement3 不要写if ( a > 4 ) { return false } else { return true }这样的代码,直接写return a > 4
Static non-final field names should comply with a naming convention2 命名要规范。
Modifiers should be declared in the correct order2 修饰符等要按约定俗成的顺序书写 ,例如:写成public static 而不是static public
The members of an interface declaration or class should appear in a pre-defined order2 根据Oracle定义的Java代码规范中,不同代码的出现位置应该如下所示:class and instance variables--Constructors--Methods
Array designators "[]" should be on the type, not the variable2 数组的括号要写在类型后面,而不是变量后面,例如 int[] a 而不是int a[]
Multiple variables should not be declared on the same line1 不要在同一行定义多个变量。
"switch" statements should have at least 3 "case" clauses1 当至少有3种或者3种以上的情况时,才考虑用switch,否则用if/else的形式。
Overriding methods should do more than simply call the same method in the super class1 既然在子类中重写了父类的某个方法,那就再这个方法中做些与父类方法不同的事情,否则没必要重写。
Statements should be on separate lines1 错误:
if(someCondition) doSomething();正确:
if(someCondition) { doSomething() }
Method names should comply with a naming convention1 命名要规范。
"TODO" tags should be handle TODO标签要及时处理,该做的事情不要忘了做。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容