Случаи, когда выбрасывается исключение java.lang.nullpointerexception

Мы часто сталкиваемся с этой ошибкой в наших программах. java.lang.NullPointerException. Эта ошибка возникает, когда вы пытаетесь использовать нулевой объект, который не имеет значения в следующих случаях:
  • Вызов метода null instance.
  • Доступ или изменение экземпляра нулевого объекта.
  • Исключение предназначено для throw.
  • При вызове длины массива null.
  • При доступе к нулевым позициям, таким как массив.
  • При синхронизации нулевого объекта или использовании его внутри синхронизированного блока.
Каким средством определяется причина и останавливается исключение, завершившее выполнение программы?

На объекты ссылаются указатели в java

Объект - это экземпляр класса или массив, ссылки - это указатели на эти объекты, а нулевая ссылка - это Ссылки  no object.
Когда вы объявляете переменную, Java устанавливает переменную x в 0 и создается указатель, который ссылается на этот объект. Например, в следующем коде мы объявим переменную x:

int x;
x = 5;
В этом примере переменная x по умолчанию равна нулю, а вторая строка, значение 5, записывается в ячейку памяти, на которую указывает x. Java запрещает программисту манипулировать ячейками памяти, она дает доступ только к методам объекта, а не к месту памяти.

Cases или  NullPointerException thrown

1) Вызов метода экземпляра null

Point dot = null; 
dot.getX();
Исключение в потоке "main" java.lang.NullPointerException
at Test.main(Test.java:27)
2) Доступ к экземпляру пустого объекта или его изменение.
Доступ к нулевой ссылке вызывает исключение  NullPointerException:

Точка точка = null; 
dot.getX();
Исключение в потоке "main" java.lang.NullPointerException
at Test.main(Test.java:38)
3) При использовании throw null
throw проверяет, что аргумент не равен NULL, А если он равен нулю, то он повышается. NullPointerException.

IOException nullException = null; 
try {
throw nullException;
} catch (IOException e) {
e.printStackTrace();
}
4) При вызове массива null length

char[] ch = null; 
int длина = длина канала;
5) При доступе к пустым местам, таким как array
Например, доступ к полям массива null.

char[] ch = null; 
char c = ch[0];
6) При синхронизации null
Вы получаете  NullPointerException  Если вы пытаетесь синхронизировать объект null или поместите его внутрь синхронизированного блока.

Thread th=null; 
synchronized(th){
System.out.print("этот поток синхронизирован");
}

Какие профилактики

  • Лучший способ избежать такого рода исключений  В случае, если вы не создали объект самостоятельно проверяет, равен ли объект нулю. Код должен быть написан следующим образом:

    • void display(String phrase){
      //проверяем, не является ли предложение нулевым
      if(phrase!=null)
      System.out.print(phrase);
      }
      В некоторых случаях это решение не является оптимальным, так как объект имеет значение null, поэтому в процедуре display() ничего не происходит.
  • В интегрированных средах разработки, таких как Eclipse или Netbeans, отображается номер строки, вызвавшей ошибку. Это хороший способ определить тип ошибки.
  • Переменные могут иметь значение по умолчанию, как String в этом коде:

    • String string=""; 
  • Инициализируем флажки после объявления массива.

    • //Declaration
      Thread[] th=new Thread[3];
      //Инициализация
      th[0]=new Thread();
      th[1]=new Thread();
      th[2]=new Thread();
  • Используйте логические переменные, счетчики,... и т.д., чтобы оптимизировать ваш код.