滥用静态字段
由于在方法内对静态属性进行赋值操作
class A{
    private static int count;
    public void init(int num){
        count = num;
    }
}
引用null对象
引用了一个为 NULL 的对象
class A{
    private static int count;
    public void init(int num){
        Integer num = null;
        num.intValue();
    }
}
本地变量存储了闲置不用的对象
对变量进行赋值,但是后面的代码没有用到这个变量
class A{
    //第一种情况
    public void init(int a){
        int num = 3;
        num = a;
    }
    //第二种情况
    public void init(int a){
        int num = 3;
        //...
    }
}
无用的代码
创建了无用的对象
class A{
    public void init(int a){
        List<String> list = new ArrayList<>();
    }
    
}
创建了无用的方法
class A{
    public void init(){
        List<String> list = new ArrayList<>();
        list.add("123");
        list.add("234");
    }
}
(滥用)异常捕获
在不会抛出异常的代码里尝试捕获异常
class A{
    public void init(){
        try{
            List<String> list = new ArrayList<>();
        }catch (Exception e) {
            
        }
    }
}
方法的返回值使用不当
忽略没有副作用的方法的返回值
class A{
    public void init(){
        List<String> list = new ArrayList<>();
        list.size();
    }
}
对 null 值的冗余校验
对已知的非空对象进行null值校验
class A{
    public void init(){
        if(getList() != null){
        }else{
        }
    }
    private List<String> getList(){
        List<String> list = new ArrayList<>();
        return list
    }
}
对已知的空对象进行null值校验
class A{
    public void init(){
        if(getList() == null){
        }else{
        }
    }
    private List<String> getList(){
        return null
    }
}
可疑的整数表达式
整数值上的空位掩码操作
class A{
    public void init(int num){
        int a = num & 0xFFFFFFFF;
    }
}
重复分支
两个分支内的代码一样
class A{
    public void init(int num){
        if(num>0){
            num = 0;
        }else{
            num = 0;
        }
    }
}
可疑的方法调用
代码包含绝对路径的硬编码引用
class A{
    public void init(int num){
        File file = new File("D:\test\test.txt");
    }
}
比较两个浮点数是否相等
比较两个浮点数是否相等
class A{
    public void init(double a,double b){
        if (a == b){
        }
    }
}
引用空对象
引用已知为null的对象
class A{
    public void init(List<String> list){
        if (list == null){
            System.out.print(list.toString());
        }
    }
}
switch 语句使用不当
switch 语句缺少 default 分支
class A{
    public void init(int a){
        switch a {
            case 1:
                break;
            case 2: 
                break;
            }
    }
}
引用空指针
可能会抛出空指针异常
class A{
    public void init(List<String> list){
        System.out.print(list.size());
    }
}
引用了某个异常控制的对象。
class A{
    public void init(){
        List<String> list = null;
        try{
            list = new ArrayList<>();
            
        }catch (Exception e) {
            
        }
        System.out.print(list.size());
    }
}
方法调用对非null参数传递null值
class A{
    public void init(String str){
        //compareTo方法要求参数不能为null,否则会抛出NullPointerException
        "abc".compareTo(str)
    }
}
保证不能引用空值
class A{
    public void init(boolean flag){
        List<String> list = null;
        if(flag){
            list.add("abc");
        }
    }
}
生成了无用/非信息的字符串
无效的 toString 方法
class A{
    public void init(int[] arr){
        //会打印出 arr 的哈希值,而不是数组的的内容
        System.out.print(arr);
    }
}
方法的返回值使用不当
该方法的返回值应该进行检查
class A{
    public void init(int[] arr){
        String dateString = getHeaderField(name);
        dateString.trim();
    }
}
PS:这种警告通常出现在调用一个不可变对象的方法,认为它更新了对象的值。
程序员似乎以为trim()方法将更新dateString引用的字符串。
但由于字符串是不可改变的,trim()函数返回一个新字符串值,在这里它是被忽略了。
该代码应更正:
String dateString = getHeaderField(name);
dateString = dateString.trim();
字符串格式化问题
传递的参数多于格式字符串中实际使用的参数
class A{
    public void init(String num1,String num2){
        //错误,这种写法不会格式化字符串
        String dateString = String.format("num1: {},num2:{}", num1,num2)
        String dateString2 = String.format("num1: {0},num2:{1}", num1,num2)
        //正确的写法
        String dateString3 = String.format("num1: %s,num2:%s", num1,num2)
    }
}
比较不兼容的类型是否相等
调用equals()比较不同的类型
class A{
    public void init(String str){
        Integer num = new Integer()
        if(str.equals(num)){
        }
    }
}
对象的比较使用了 “==” 而不是调用 equals 方法
可疑的比较
class A{
    public void init(String str){
        if("abc" == str){
        }
    }
}
与null值的冗余比较
没有对参数进行空值校验
class A{
    public void init(String str){
        System.out.println(getStr().size())
    }
    private List<String> getList(){
        return null;
    }
}
IO流没有关闭
方法体内没有对IO流进行关闭
忽略了异常
方法忽略了异常
class A{
    public void init(){
        try{
            
        }catch (Exception e) {
            //当抛出异常时什么都没有做
        }
    }
}
方法返回值使用不当(多为忽略了方法返回值)
忽略了方法的异常返回值
class A{
    public void init(){
        File file = new File("/aaa")
        //文件mkdir可能返回false
        file.getParentFile().mkdirs()
    }
}
序列化的类定义不正确
可序列化的类中存在不可序列化的属性
class A implements Serializable{
    //List对象不能直接序列化
    private List<String> list;
}
Stirng 对象的比较使用了 == 或 !=
Stirng 对象的比较使用了 == 或 !=
String对象的比较应该使用 equals() 方法
不规范的方法名
方法名应该以小写字母开头,符合驼峰式命名格式
返回数组的方法可以暴露内部表示
可以通过返回的可变对象的引用来公开内部表示
class A{
    private List<String> list = new ArrayList<>();
    public List<String> getList(){
        return list;
    }
}
可以通过引用可变对象来公开内部表示
class A{
    private List<String> list;
    public void setList(List<String> list){
        this.list = list;
    }
}