Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
public class Student {
private int id;
public int getId() {
return this.id;
}
public setId(int newId) {
this.id = newId;
}
}
Приведенный ниже код дает вам исключение с нулевым указателем.
public class School {
Student obj_Student;
public School() {
try {
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Поскольку вы используете Obj_Student
, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School {
Student obj_Student;
public School() {
try {
obj_Student = new Student();
obj_Student.setId(12);
obj_Student.getId();
}
catch(Exception e) {
System.out.println("Null Pointer ");
}
}
}
Думайте о некоторых проблемах, которые могут произойти, если нет никакой новой строки. Согласно стандарту ANSI #include
из файла вначале вставляет файл точно, как это к передней стороне файла и не вставляет новую строку после #include <foo.h>
после содержания файла. Таким образом, при включении файла без новой строки в конце синтаксическому анализатору, это будет просматриваться, как будто последняя строка foo.h
находится на той же строке как первая строка foo.cpp
. Что, если последняя строка foo.h была комментарием без новой строки? Теперь первая строка foo.cpp
комментируется. Это просто несколько примеров типов проблем, которые могут накопиться.
Просто хотел указать на любые заинтересованные стороны на ответ James ниже. В то время как вышеупомянутый ответ все еще корректен для C, новый стандарт C++ (C++ 11) был изменен так, чтобы это предупреждение больше не выпускалось при использовании C++ и компилятора, соответствующего C++ 11.
От C++ 11 стандартов с помощью сообщения James:
исходный файл А, который не пуст и это не заканчивается в символе новой строки, или это заканчивается в символе новой строки, которому сразу предшествует символ обратной косой черты, прежде чем любое такое соединение произойдет, буду обработан, как будто дополнительный символ новой строки был добавлен в файл (C++ 11 В§2.2/1).
C++ 03 Стандарта [2.1.1.2] объявляет:
... Если исходный файл, который не пуст, не заканчивается в символе новой строки или заканчивается в символе новой строки, которому сразу предшествует символ обратной косой черты, прежде чем любое такое соединение произойдет, поведение не определено.
Ответ для "послушного", "потому что C++, в 03 Стандартах говорится поведение программы, не заканчивающейся в новой строке, не определен" (перефразируемый).
ответ для любопытного здесь: http://gcc.gnu.org/ml/gcc/2001-07/msg01120.html .
Это не относится к пустой строке, именно, завершается ли последняя строка (может иметь содержание в нем) с новой строкой.
Большинство текстовых редакторов поместит новую строку в конце последней строки файла, поэтому если последняя строка не будет иметь один, существует риск, что файл был усеченным. Однако существуют допустимые причины, почему Вы не могли бы хотеть новую строку, таким образом, это - только предупреждение, не ошибка.
#include
заменит его строку литеральным содержанием файла. Если файл не закончится новой строкой, строка, содержащая #include
, который сдержался, то это объединится со следующей строкой.