Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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 ");
}
}
}
Вы собираетесь выполнить в чем-то другом 'вложенный если' пример если, на самом деле, txtPackage. Текст не пуст, но содержит что-то другое, чем "abc"?
, Если бы Вы не, я спросил бы, почему Вы проверяете на string.empty вообще?
Вы могли просто записать:
if (txtPackage.Text == "abc")
{
//
}
и быть сделанным с ним.
Полностью зависит от того, что Вы хотите сделать в конце.
Я не собирался вмешиваться, но видел, что некоторые ответы здесь, кажется, о, "Мне нравится мой код к взгляд как это"... Я чувствую, что должен сказать, что что-то :)
"Лучше" означает, что код выполнится быстрее, или это более читаемо / растяжимый. Вы были бы хотеть вложить свой if's в случае, что у Вас возможно было бы несколько проверок, что у всех есть общее требование.
Пример:
if (myThingy != null)
{
if (myThingy.Text = "Hello") ...
if (myThingy.SomethingElse = 123) ...
}
РЕДАКТИРОВАНИЕ: также нужно сказать, что вложение Ваш IF's требует большего количества циклов ЦП (и поэтому "медленнее"), чем сингл, ЕСЛИ. Вдобавок ко всему, порядок Ваших условий может значительно увеличить производительность.
Exapmle снова:
if (somethingQuick() && somethingThatTakesASecondToCalculate()) ...
НАМНОГО быстрее (конечно), чем
if (somethingThatTakesASecondToCalculate() && somethingQuick()) ...
, поскольку, если первая часть, ЕСЛИ сбои, вторая часть не будет даже выполняться, таким образом экономя время.
Действительно необходимо определить то, под чем Вы подразумеваете "лучше".
Мой стиль должен использовать тот, если и И если, как в Вашем примере, я тестирую то же самое на два различных значения.
, Если два теста концептуально отличаются, я, вероятно, вложу их
if (!user_option.work_offline) {
if (no_current_connection) {
start_connection()
}
}
Я чувствую, что лучше избежать вложенной IFS.
Иногда, я даже копирую простые тесты для предотвращения уровня вложенности.
Пример (Python):
# I prefer:
if a and b:
foo()
elif a and not b:
bar()
elif not a and b:
foobar()
elif not a and not b:
baz()
# Instead of:
if a:
if b:
foo()
else:
bar()
else:
if b:
foobar()
else:
baz()
Иногда более естественно иметь выражение else как последнюю часть. В тех случаях я обычно утверждаю условия выражения else. Пример:
if a and b:
foo()
elif a and not b:
bar()
elif not a and b:
foobar()
elif not a and not b:
baz()
else:
assert not a and not b
baz()
Это зависит от того, чего точно Вы хотите достигнуть. Это - логический вопрос, а не запрос программирования. Если у Вас есть зависимое условие т.е. Если первым является TRUE, и затем протестируйте второе условие; если вторые TRUE затем делают что-то, если ЛОЖЬ делает что-то, в этом случае необходимо использовать вложенный если. Но Вам нужно состояние обоих условия сделать что-то затем, что можно пойти с операторами.
+1 к itsmatt
По исходному вопросу, я лично избегаю, вложил IFS по мере возможности, иначе я закончу с большим количеством кода стрелки.
существуют, однако, исключения к этому мини-правилу. Если там будет другим поведением для каждого из условных результатов, то вложенный ifs может быть ответом. Необходимо тщательно рассмотреть влияние вложения, таким образом, Вы не пишете трудный читать (и поэтому поддержать) код.
Я предпочитаю использовать условное выражение И/ИЛИ операторы при необходимости вместо вложенной IFS. Выглядит менее грязным и делает для меньшего количества строк кода.
if (thisIsTrue) {
if (thisIsTrueToo) doStuff();
}
essentally то же как:
if (thisIsTrue && thisIsTrueToo) doStuff();
, если thisIsTrue является ложью, второе условие не оценено. Работы также для || для условного выражения ИЛИ.
Я думаю, что это зависит от того, как Вы хотите, чтобы это текло, если Вы только выполняете на истинном, истинном (или особенность) затем ту, если оператор - все, в чем Вы нуждаетесь.
По-моему, необходимо использовать стиль, который имеет большую часть смысла для того, на что Вы тестируете. Если эти два тесно связаны, Вы могли бы протестировать на обоих на той же строке без потери ясности. Особенно легкий, когда программа разрешает "если x == (1 ИЛИ 2)" конструкции.
, С другой стороны, если бы два теста разделяются, я предпочел бы разделять их для создания логики более явной.