什么是findbug可能的空指针引用的含义是什么?(What is the meaning of P

2019-07-31 08:22发布

我使用的声纳和我有这种违规从它的我的代码和平:

 Correctness - Possible null pointer dereference  

有没有人知道在这个FindBugs的规则? 我搜索了很多,但我不能找到一个很好的示例代码(在Java中),它描述了这个规则,不幸的是FindBugs的网站并没有对这条规则的任何示例代码或很好的说明。

为什么会出现这种违反出现?

Answer 1:

它说, 在这里

NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)

有说法的一个分支,如果执行,保证空值将被废弃时,被执行的代码时会产生一个NullPointerException。 当然,这个问题可能是该分支或声明是不可行的,并且永远不能被执行的空指针异常; 决定这超出的FindBugs的能力。

如果您已经发布了一些代码,它会更容易回答。

编辑我没有看到大量的文档资料,但这里是一个例子 ! 希望这可以帮助!



Answer 2:

一个示例代码是这样的。

String s = null ;
if (today is monday){
    s = "Monday" ;
else if (today is tuesday){
    s = "Tuesday" ;
}
System.out.println(s.length()); //Will throw a null pointer if today is not monday or tuesday.


Answer 3:

好的

这是两个简单的例子:一人给一:可能的空指针引用

1. Error
     ArrayList a = null;
     a.add(j, PointSet.get(j));
     // now i'm trying to add to the ArrayList 
     // because i'm giving it null it gives me the "Possible null pointer dereference"

2. No Error
     ArrayList a = new ArrayList<>();
     a.add(j, PointSet.get(j));
     // adding elements to the ArrayList
     // no problem

简单吗?



Answer 4:

在简单的语言,如果一个变量的值被指定为空,并尝试与像添加任何内置的方法来访问/获取。 然后空指针引用问题带有SONAR。 因为有改变它走空,抛出空指针异常。 如果可能,尝试以避免它。

防爆文件文件= NULL; file.getName(); 会抛出“可能的空指针引用”

作为例子提到的它可能不是直接发生的,也可以是无意的。



Answer 5:

我用下面的代码这个问题: -

BufferedReader br = null;
    String queryTemplate = null;
    try {
        br = new BufferedReader(new FileReader(queryFile));
        queryTemplate = br.readLine();
    } catch (FileNotFoundException e) {
      //  throw exception
    } catch (IOException e) {
       // throw exception
    } finally {
        br.close();
    }

在这里, br的BufferedReader可以nullbr.close() 然而,它也只能是null ,如果new BufferedReader()失败,在这种情况下,我们都扔了相关的例外。

因此,这是一个错误的警告。 Findbugs文档提到相同: -

   This may lead to a NullPointerException when the code is executed.  
   Note that because FindBugs currently does not prune infeasible 
   exception paths, this may be a false warning.


文章来源: What is the meaning of Possible null pointer dereference in findbug?