Что означает возможное разыменование нулевого указателя в findbug?
Я использую сонар, и у меня есть такое нарушение от него для мира моего кода:
Correctness - Possible null pointer dereference
кто-нибудь знает об этом правиле в findbugs? Я много искал, но не могу найти хороший пример кода (на Java), который описывает это правило, к сожалению, сайт findbugs не имел никакого примера кода или хорошего описания этого правила.
Почему появляется это нарушение?
5 ответов
Он говорит:здесь
NP: Possible null pointer dereference (NP_NULL_ON_SOME_PATH)
существует ветвь оператора, которая при выполнении гарантирует, что значение null будет разыменовано, что создаст исключение NullPointerException при выполнении кода. Конечно, проблема может заключаться в том, что ветвь или оператор неосуществимы и что исключение нулевого указателя никогда не может быть выполнено; решение, которое выходит за рамки возможностей FindBugs.
Если бы ты отправил какой-то код, на который было бы легче ответить.
редактировать я не вижу много документации, но вот один пример! Надеюсь, это поможет!
пример кода что-то вроде этого.
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.
ОК
Это два простых примера : Первый дает : возможно разыменование null-указателя
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
простой ?
на простом языке, если значение переменной назначено как null, и вы пытаетесь получить к нему доступ с помощью любого встроенного метода, такого как add/get. Затем проблема разыменования нулевого указателя поставляется с SONAR. Потому что есть изменения для него go null и throw null исключение указателя. Постарайтесь избежать этого, если это возможно.
Ex File file=null; файл.метод getname(); бросит "возможно разыменование указателя"
Это может произойти не сразу, как указано в примере, это может быть непреднамеренно.
я получил эту проблему со следующим фрагментом кода: -
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 может быть null
на br.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.