摘抄自:http://pmd.sourceforge.net/rules/optimizations.html
一、Optimization Rules:最佳规则
1、LocalVariableCouldBeFinal:A local variable assigned only once can be declared final.
2、MethodArgumentCouldBeFinal:A method argument that is never assigned can be declared final.
3、AvoidInstantiatingObjectsInLoops:Detects when a new object is created inside a loop
public class Something {
public static void main( String as[] ) {
for (int i = 0; i < 10; i++) {
Foo f = new Foo(); //Avoid this whenever you can it's really expensive
}
}
}
5、UseArrayListInsteadOfVector:ArrayList is a much better Collection implementation than Vector.
6、UseArraysAsList:The java.util.Arrays class has a "asList" method that should be used when you want to create a new List from an array of objects. It is faster than executing a loop to copy all the elements of the array one by one.
public void foo(Integer[] ints) {
// could just use Arrays.asList(ints)
List l= new ArrayList(10);
for (int i=0; i< 100; i++) {
l.add(ints[i]);
}
for (int i=0; i< 100; i++) {
l.add(a[i].toString()); // won't trigger the rule
}
}
7、AvoidArrayLoops:Instead of copying data between two arrays, use System.arraycopy method.
public void bar() {
int[] a = new int[10];
int[] b = new int[10];
for (int i=0;i<10;i++) {
b[i]=a[i];
}
}
// this will trigger the rule
for (int i=0;i<10;i++) {
b[i]=a[c[i]];
}
}
8 、AddEmptyStirng:Finds empty string literals which are being added. This is an inefficient(无效) way to convert any type to a String.
String s = "" + 123; // bad
String t = Integer.toString(456); // ok
二、Basic Rules:The Basic Ruleset contains a collection of good practices which everyone should follow.
1、EmptyCatchBlock:
public void doSomething() {
try {
FileInputStream fis = new FileInputStream("/tmp/bugger");
} catch (IOException ioe) {
// not good
}
2、JumbledIncrementer:Avoid jumbled loop incrementers - it's usually a mistake, and it's confusing even if it's what's intended.
for (int i = 0; i < 10; i++) {
for (int k = 0; k < 20; i++) {
System.out.println("Hello");
}
}
3、UnnecessaryConventionTemporary:Avoid unnecessary temporaries when converting primitives to Strings
// this wastes an object
String foo = new Integer(x).toString();
// this is better
return Integer.toString(x);
3、DoubleCheckingLocking:Partially(部分的) created objects can be returned by the Double Checked Locking pattern when used in Java. An optimizing(最佳的) JRE may assign a reference to the baz variable before it creates the object the reference is intended to point to
Object baz;
Object bar() {
if(baz == null) { //baz may be non-null yet not fully created
synchronized(this){
if(baz == null){
baz = new Object();
}
}
}
return baz;
}
4、ReturnFromFinalBlock:Avoid returning from a finally block - this can discard exceptions.
5、UnnecessaryReturn
public void bar() {
int x = 42;
return;
}
6、UnnecessaryReturn
7、UnConditionIfStatement:Do not use "if" statements that are always true or always false.
8、BooleanInstantiation:Avoid instantiating Boolean objects; you can reference Boolean.TRUE, Boolean.FALSE, or call Boolean.valueOf() instead.
9、UnnnessaryFinalModifier:
public final class Foo {
// This final modifier is not necessary, since the class is final
// and thus, all methods are final
private final void foo() {
}
}
10、CollapsiableIfStament:Sometimes two 'if' statements can be consolidated(合并) by separating their conditions with a boolean short-circuit operator(短路&&).
void bar() {
if (x) {
if (y) {
// do stuff
}
}
}
11、ClassCastExceptionWithToArray:
public static void main(String[] args) {
Collection c=new ArrayList();
Integer obj=new Integer(1);
c.add(obj);
// this would trigger the rule (and throw a ClassCastException if executed)
Integer[] a=(Integer [])c.toArray();
// this wouldn't trigger the rule
Integer[] b=(Integer [])c.toArray(new Integer[c.size()]);
}
12、BrokenNullCheck:The null check is broken since it will throw a NullPointerException itself. It is likely that you used || instead of && or vice versa(反之亦然).
// should be &&
if (string!=null || !string.equals(""))
return string;
// should be ||
if (string==null && string.equals(""))
return string;
13、AvoidUsingOctalValue:Integer literals should not start with zero. Zero means that the rest of literal will be interpreted(理解) as an octal value(八进制).
public class Foo {
int i = 012; // set i with 10 not 12
int j = 010; // set j with 8 not 10
k = i * j; // set k with 80 not 120
}
分享到:
相关推荐
自己整理的PMD检查的各个规则说明,其中打○的是我自己用的规则,大家自己按实际需要选择吧,有不对的地方请多多指教。
PMD 代码检查工具使用指南 PMD 是一个静态代码分析工具,主要用于检查 Java 代码的质量和可读性。下面是 PMD 的使用指南,包括安装、运行、规则配置和自定义规则等方面的内容。 安装和运行 PMD 可以通过命令行或...
本压缩包中的"PMD_xml"文件是PMD规则的XML配置文件,它定义了PMD如何检查代码。XML格式使得规则可以被清晰地组织和定制,以便满足不同项目或团队的特定需求。 **PMD规则文件内容解析** 1. **规则集(RuleSet)** ...
2. **代码规范检查**:PMD遵循一些常见的编程规范,如Sun编码规范,它能检查代码是否符合这些规范,例如命名约定、避免使用魔法数字、避免冗余的代码等。 3. **设计问题识别**:PMD能够检测出设计上的问题,如过长...
每个规则都可以根据项目的具体需求进行启用或禁用,以确保PMD对代码的检查更加精确且有针对性。 安装PMD非常简单,从官方下载最新版本的PMD压缩包后,按照“安装步骤.txt”中的指导操作即可。通常,这包括解压文件...
4. **运行PMD检查**:保存代码后,MyEclipse会自动运行PMD检查,并在问题视图中显示结果。 **PMD规则说明文档** 提供了详细的规则解释,帮助开发者理解每条规则的作用和意义。这些规则通常分为不同的类别,如设计、...
PMD是一款强大的Java代码检查工具,它遵循BSD开源协议,被广泛用于提升代码质量、发现潜在的bug、优化代码结构和风格。这款工具通过对源代码进行静态分析,帮助开发者在代码执行之前找出可能存在的问题,从而减少...
PMD检查工具4.0是一款针对Java编程语言的静态代码分析工具,旨在帮助开发者发现并修复源代码中的潜在问题,如冗余代码、未使用的变量、空捕获块、复杂度过高的方法等。该工具在Java开发领域广泛应用,通过自定义规则...
PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...
pmd-bin 静态代码分析工具 ...PMD具有许多内置检查(以PMD术语,规则),在我们的“规则”参考中针对每种语言进行了记录。 我们还支持广泛的API来编写您自己的规则,您可以使用Java或作为独立的XPath查询来执行。
PMD是一款开源的静态代码检测工具,可以检查代码的质量问题,文件是对PMD检测规则进行说明,解压密码:PMD。
PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...
6. **集成IDEA功能**:与IDEA的集成使得PMD检查结果可以直接与重构、代码导航等功能结合,提高问题解决效率。 **安装与配置** 要在IDEA中安装PMDPlugin,用户可以通过以下步骤操作: 1. 打开IDEA的设置(Settings...
5. **自定义规则**:除了内置的规则集,用户还可以根据项目需求定制PMD规则,确保检查符合项目的特定需求。 在SonarQube中安装和配置PMD插件的步骤通常包括: 1. **下载插件**:获取`sonar-pmd-plugin-2.6.jar`...
- **检查代码**:选中需要检查的类或整个项目,右击选择`PMD -> check code with PMD`。 #### 三、代码格式化模板(Formatter和Code Templates) **1. 替换代码格式化模板** - **定位模板文件**:Formatter和Code...
PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。该软件功能强大,扫描效率高,是Java程序员debug的好帮手。 ...
Flex代码检查PMD是一种针对ActionScript 3(AS3)代码的质量分析工具,与Java中的PMD类似。PMD( Potion Memory Debugger)最初是为Java语言设计的源代码分析器,用于检测潜在的编程错误、代码异味(code smell)...
2. **使用PMD检查代码**:在Eclipse中,右键点击项目,选择`PMD->Check Code With PMD`,PMD会扫描项目并显示检查结果。在PMD视图中,可以按照错误等级过滤信息,例如错误、警告等。在`Package Explorer`和代码文件...
PMD通过解析Java源代码,然后应用一系列预定义的规则来检查代码。这些规则涵盖了各种常见问题,如未使用的变量、过度复杂的表达式、空的循环体、潜在的空指针异常等。当PMD在代码中发现不符合规则的地方,它会生成...
通过一系列预定义的规则集,PMD可以帮助开发者编写出更高质量、更易维护的代码。BasicRules是PMD提供的一组核心规则,包含了每个开发人员都应该遵循的基本编程实践。 #### 二、重要规则解析 1. **EmptyCatchBlock...