Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Apache Вход палаты общин не предназначается для приложения общий вход. Это предназначается, чтобы использоваться библиотеками или API, которые не хотят вызывать регистрирующуюся реализацию на пользователе API.
существуют также classloading проблемы с Входом палаты общин.
Выбор один из [многих], регистрирующих API, наиболее широко используемый, вероятно, быть log4j или API Входа Java.
, Если Вы хотите независимость реализации, Вы могли бы хотеть рассмотреть SLF4J исходным автором log4j.
выбиравший реализацию, затем используйте регистрирующиеся уровни/серьезность в рамках той реализации последовательно , так, чтобы поиск/фильтрация зарегистрировался, легче.
Вход непосредственно к консоли является ужасающим и откровенно говоря, метка неопытного разработчика. Единственная причина сделать этот вид вещи 1) он не знает о других подходах и/или 2) разработчик не думал один бит о том, что произойдет, когда его код будет развернут на месте производства, и как приложение будет сохраняться в той точке. Контакт с приложением, которое регистрирует 1GB/day или больше абсолютно ненужного входа отладки, невыносим.
общепринятая лучшая практика должна использовать Платформу журналирования, которая имеет понятие:
возможная платформа журнала, которую Вы будете использовать, будет, конечно, зависеть от Вашей платформы. Некоторые общие опции:
Самый легкий способ зарегистрировать ошибки в последовательном формате состоит в том, чтобы использовать платформу журналирования, такую как Log4j (предполагающий использование Java). Полезно включать регистрирующийся раздел в Ваши стандарты кода, чтобы удостовериться, что все разработчики знают что потребности быть зарегистрированными. Хорошая вещь о большинстве платформ журналирования, у них есть различные уровни входа, таким образом, можно управлять, насколько подробный вход между разработкой, тестом и производством.
Лучшая практика должна использовать java.util.logging платформу
Тогда, можно зарегистрировать сообщения или в этих форматов
log.warning("..");
log.fine("..");
log.finer("..");
log.finest("..");
, Или
log.log(Level.WARNING, "blah blah blah", e);
Тогда можно использовать logging.properties (пример ниже), чтобы переключиться между уровнями входа и сделать все виды умного материала как вход в файлы, с вращением и т.д.
handlers = java.util.logging.ConsoleHandler
.level = WARNING
java.util.logging.ConsoleHandler.level = ALL
com.example.blah = FINE
com.example.testcomponents = FINEST
, Платформ как log4j и другие нужно избежать, по-моему, Java имеет все, в чем Вы уже нуждаетесь.
РЕДАКТИРОВАНИЕ
Это может применяться как общая практика для любого языка программирования. Способность управлять всеми уровнями входа от единственного файла свойств часто очень важна в корпоративных приложениях.
Некоторые предложенные лучшие практики
Использование платформа журналирования. Это позволит Вам:
при использовании Java, тогда , slf4j теперь предпочтен Джакартское свободное городское население, регистрирующееся как регистрирующийся фасад.
, Как указано slf4j является фасадом, и необходимо тогда выбрать конкретную реализацию. Или log4j, java.util.logging, или 'простой'.
Следуют совету Вашей платформы к обеспечению , дорогие операции входа напрасно не выполняются
Действительно нет никакой лучшей практики для входа ошибки. Это в основном просто должно следовать за последовательным шаблоном (в рамках программного обеспечения/компании/и т.д.), который предоставляет достаточно информации для разыскивания проблемы. Например, Вы могли бы хотеть отслеживать время, метод, параметры, вызывающий метод, и т.д.
, Пока Вы только печатаете "Ошибку в"
Апачский общий API входа, как упомянуто выше является большим ресурсом. Вернувшись к Java, существует также поток вывода стандартной погрешности (System.err).
Непосредственно от API Java:
Этот поток уже открыт и готов принять выходные данные.
Обычно этот поток соответствует выводу дисплея или другому выходному месту назначения, определенному серверной средой или пользователем. Условно, этот поток вывода используется для отображения сообщений об ошибках или другой информации, которая должна привлечь пристальное внимание пользователя, даже если основной поток вывода, значение переменной, был перенаправлен в файл или другое место назначения, которое обычно непрерывно не контролируется.