2013-06-23 3 views
0

Я знаю, что java не может дать мне имя нулевого поля во время выполнения, но во многих случаях с сообщением NullPointerException, которое содержит нулевое имя класса времени выполнения объекта, возможно, было бы намного проще проследить причину исключения. Или я что-то упускаю, и это тоже невозможно?Java NullPointerException - могу ли я указать класс нулевого объекта?

P.S. Даже если такого стандартного способа нет, можете ли вы придумать трюк, чтобы сделать это?

EDIT:
Для уточнения - я знаю, что могу (в большинстве случаев) проследить источник легко из строки кода, но:

  • в некоторых случаях это потребует глубже копаться в (если блок try недостаточно глубоко - это плохой способ кодирования, но иногда это определенный факт).
  • Скажите, что какой-то новый парень SO спрашивает об этом Исключении, а затем сообщение может помочь нам решить его проблему намного быстрее (что верно в любом случае отладки из журналов).
+1

Если вы внимательно посмотрите на свой журнал ошибок, вы можете легко найти точное место, где произошло исключение. – stinepike

+1

. Вы можете прочитать stacktrace ошибки и можете найти, какой метод выдает исключение, в какой строке, и определенно вы можете найти, какая переменная равна нулю на этой строке –

+3

StinePike: вы получаете строку, но эта строка может содержать около полудюжины ссылок, каждая из которых может быть «null». Сказав это, у меня никогда не было такой проблемы, как найти виновника. – Joey

ответ

4

По определению, null это просто; null, no class, no object, просто ничего. Итак, невозможно сказать вам, что было нулевым. Но если вы можете увидеть исходную строку, тогда должно быть легко догадаться, каким был нуль, к которому программа пыталась получить доступ.

+0

Разве JVM не знает тип нулевого указателя при попытке ссылаться на него? Если нет, то как он знает, какую структуру памяти ожидать? Разве виртуальная таблица не читается во время выполнения? – Elist

+0

Эта проверка для типа объекта выполняется во время компиляции. Во время работы неизвестно. Во время выполнения JVM ожидает ссылку на объект. См. Другие связанные вопросы. – Ayman

3

Существует только один null на всей виртуальной машине Java, а не null на класс. Так что это невозможно.