Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже - класс ученика, который будет использовать его в нашем коде.
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://www.easymaths.com/What_on_earth_is_Bodmas.htm :
, Что Вы думаете ответ на 2 +, 3 x 5?
он (2 + 3) x 5 = 5 x 5 = 25?
или 2 + (3 x 5) = 2 + 15 = 17?
BODMAS может прийти на помощь и дать нам правила следовать так, чтобы мы всегда получили правильный ответ:
(B) ракетки (O) rder (D) ivision (M) ultiplication (A) ddition (S) вычитание
Согласно BODMAS, умножение должно всегда делаться перед дополнением, поэтому 17 на самом деле корректный ответ согласно BODMAS и также будет ответ, который даст Ваш калькулятор, если Вы введете в 2 + 3 x 5.
, Почему это полезно в программировании? Никакая идея, но я предполагаю, что это - потому что можно избавиться от некоторых скобок? Я - довольно защитный программист, таким образом, мои строки могут быть похожими на это:
result = (((i + 4) - (a + b)) * MAGIC_NUMBER) - ANOTHER_MAGIC_NUMBER;
с BODMAS можно сделать это немного более ясным:
result = (i + 4 - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
я думаю, что все еще использовал бы первый вариант - больше скобок, но тот способ, которым я не должен изучать еще одно правило и я сталкиваюсь с меньшим количеством риска упущения его и порождения странных трудно для отладки ошибок?
Просто предположение той части все же.
РЕДАКТИРОВАНИЕ Mike Stone: Фиксированная математика как Gaius указывает
Другая версия этого (в средней школе) была, "Извините Мою Дорогую Тетю Sally".
мнемоническое устройство было полезно в школе и все еще полезно в программировании сегодня.
Порядок операций в выражении, таких как:
foo * (bar + baz^2 / foo)
источник: http://www.mathsisfun.com/operation-order-bodmas.html
Я не имею права редактировать ответ @Michael Stum , но это не совсем корректно. Он уменьшает
(i + 4) - (a + b)
к
(i + 4 - a + b)
, Они не эквивалентны. Лучшее сокращение, которое я могу получить для целого выражения,
((i + 4) - (a + b)) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
или
(i + 4 - a - b) * MAGIC_NUMBER - ANOTHER_MAGIC_NUMBER;
Когда я изучил это в начальной школе (в Канаде), это упоминалось как BEDMAS:
B ракетки
E xponents
D ivision
M ultiplication
А ddition
Subtraction
Только для тех из этой части мира...
Я не действительно уверен, насколько применимый к программированию старой мнемосхемы BODMAS так или иначе. Нет никакой гарантии на порядке операций между языками, и в то время как многие сохраняют стандартные операции в том порядке, не все делают. И затем существуют некоторые языки, где порядок операций не действительно все что значимый (диалекты Lisp, например). В некотором смысле, Вы, вероятно, более обеспечены для программирования, если Вы забываете стандартный порядок и или используете круглые скобки для всего (например, (a*b) + c) или конкретно изучаете порядок на каждый язык, Вы работаете в.
Я считал где-нибудь, что особенно в C/C++, разделяющем Ваши выражения на маленькие операторы, было лучше для оптимизации; таким образом вместо того, чтобы писать чрезвычайно сложные выражения в одной строке, Вы кэшируете части в переменные и делаете каждого на шагах, затем создаете их, как Вы продвигаетесь.
стандартные программы оптимизации будут использовать регистры в местах, где у Вас были переменные, таким образом, это не должно влиять на пространство, но это может помочь компилятору немного.