Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Из руководства по проектированию Библиотеки классов для ошибок (http://msdn.microsoft.com/en-us/library/8ey5ey87 (По сравнению с 71) .aspx):
В большинстве случаев используйте предопределенные типы исключительной ситуации. Только определите новые типы исключительной ситуации для программных сценариев, где Вы ожидаете, что пользователи Вашей библиотеки классов поймают исключения этого нового типа и выполнят программное действие на основе самого типа исключительной ситуации. Это вместо парсинга строки исключения, которая негативно повлияла бы на производительность и обслуживание.
...
Бросьте ArgumentException или создайте исключение, полученное из этого класса, если недопустимые параметры передаются или обнаруживаются.
Выдайте исключение InvalidOperationException, если вызов к средству доступа набора свойств или методу не является соответствующим, учитывая текущее состояние объекта.
Это кажется, что "Объект указывает недопустимый" сценарий мне, таким образом, я выбрал бы InvalidOperationException по ArgumentException: параметры допустимы, но не в этой точке в жизни объектов.
.NET бросит Систему. ArgumentException, при попытке добавить объект к хеш-таблице дважды с тем же значением ключа, таким образом, он не похож, существует что-либо более определенное. Можно хотеть записать собственное исключение при необходимости в чем-то более определенном.
Почему имеет InvalidOperationException
принятый как ответ?! Это должно быть ArgumentException
?!
InvalidOperationException
должен использоваться, если объект, называя метод/свойство против него не может справиться с запросом из-за состояния uninit'ed и т.д. Проблемой здесь не является объект, Добавляемый к, но объект, передаваемый объекту (это - простофиля). Думайте об этом, если это Добавляет, что вызов никогда не происходил, был бы объект все еще функционировать как нормальный, ДА!
Это должно быть ArgumentException.
Необходимо, вероятно, бросить ArgumentException, как, именно это делают основные классы библиотеки.
Ну, если Вы действительно хотите набор с уникальными объектами, Вы могли бы хотеть смотреть на объект HashSet (доступный в C# 3.0).
Иначе существует два подхода, которые можно проявить:
Любой подход можно считать лучшей практикой, пока Вы последовательны в ее использовании.