Подтвердить что ты не робот

Проверка Java, чтобы проверить, была ли инициализирована переменная

Мне нужно использовать что-то похожее на функцию php isset. Я знаю, что php и java ЧРЕЗВЫЧАЙНО отличаются, но php - моя единственная основа предыдущих знаний о чем-то похожем на программирование. Существует ли какой-нибудь метод, который бы возвращал логическое значение для того, была ли инициализирована переменная экземпляра или нет. Например...

if(box.isset()) {
  box.removeFromCanvas();
}

До сих пор у меня была проблема, когда я получал ошибку во время выполнения, когда моя программа пытается скрыть или удалить объект, который еще не был построен.

4b9b3361

Ответ 1

Предполагая, что вы заинтересованы в том, было ли переменной явно присвоено значение или нет, ответ "не совсем". Там нет абсолютно никакой разницы между полем (переменная экземпляра или переменная класса), который еще не был явно назначен вообще, и полем, которому было присвоено значение по умолчанию - 0, false, null и т.д.

Теперь, если вы знаете, что после присвоения этому значению никогда не будет переназначено значение null, вы можете использовать:

if (box != null) {
    box.removeFromCanvas();
}

(и это также исключает возможное исключение NullPointerException), но вы должны знать, что "поле со значением null" не совпадает с "полем, которому не было явно назначено значение". Null - это совершенно допустимое значение переменной (конечно, для не примитивных переменных). Действительно, вы можете даже захотеть изменить приведенный выше код на:

if (box != null) {
    box.removeFromCanvas();
    // Forget about the box - we don't want to try to remove it again
    box = null;
}

Разница также заметна для локальных переменных, которые не могут быть прочитаны до того, как они были "определенно назначены", но одно из значений, которым они могут быть однозначно присвоены, является нулевым (для переменных ссылочного типа):

// Won't compile
String x;
System.out.println(x);

// Will compile, prints null
String y = null;
System.out.println(y);

Ответ 2

Переменные экземпляра или поля вместе со статическими переменными присваиваются значениям по умолчанию на основе типа переменной:

int: 0
char: '\ u0000' или 0
double: 0.0
boolean: false
ссылка: null

Просто хочу уточнить, что локальные переменные (т.е. объявленные в блоке, например метод, для цикла, while loop, try-catch и т.д.) не инициализируются значениями по умолчанию и должны быть явно инициализированы.

Ответ 3

Я думаю, что вы хотите проверить, установлена ​​ли переменная null:

if (box != null) {
  box.removeFromCanvas();
}

В Java неинициализированные переменные оцениваются до null (кроме тех, что относятся к примитивным типам данных, таким как int и boolean, которые имеют значения по умолчанию).

Вызов метода объекта null приведет к выбросу NullPointerException - я предполагаю, что это исключение, которое вы пила.