powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему NullPointerException не проверяемое исключение?
25 сообщений из 190, страница 1 из 8
Почему NullPointerException не проверяемое исключение?
    #39747646
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хороший вопрос. Почему IOException проверяемое, а NPE нет.

Я загуглил и выделил такие критерии:
- придется везде явно писать что там может быть NPE поскольку много где идут операции с объектами
- причина выше делает код более уродливым
- свидетельствует об ошибке программиста

Ваши варианты? почему же все таки NPE это проверяемое исключение?
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747668
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopпочему же все таки NPE это проверяемое исключение?
имхо смысл некоторых (чтоб не разводить флуд о том нужны ли проверяемые исключения в принципе) исключений в том, что они могут неизбежно возникнуть при определенных обстоятельствах. Хороший пример IOException. Пропала сеть, сайт недоступен - ошибка. Если метод "знает" об этом, но ничего не может (или не должен) по этому поводу предпринять, он прокидывает исключение выше. Возможно вызывающий код сможет что-то с этим исключением сделать, например повторить. Возможно он прокинет исключение еще дальше, если это не по его части. А NullPointer это ошибка программиста, ее не должно было быть, но она случилась
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747673
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По прошествии лет можно констатировать что эксперимент с checked эксепшенами провалился, и хотя совсем от этого уйти не получается, но многие фреймворки и обычные программисты двигаются в сторону только unchecked exceptions. В крайне редком случае, например как в примере выше и в целом когда есть какая-то разумная возможность обработать эксепшен, то только тогда можно использовать checked. В случае нуллпоинтер, нулевая ссылка - всегда нулевая ссылка, и лучше минимизировать ущерб сразу же остановив программу.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747691
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopПочему IOException проверяемое, а NPE нет.
...
Ваши варианты? почему же все таки NPE это проверяемое исключение?Определитесь-таки, NPE checked или нет.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747762
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов, опечатался. NPE не проверяемое.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747763
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я тупой, а что такое проверяемое и не проверяемое ?
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747784
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ?наверно те что пишутся в контракте метода... Названии
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747787
Ilya007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ?
Видимо вопрос в том что автор хочет чтоб они наподобие SQLException или IOException, требовали отлавливания/обработки.
Были более предсказуемы.

Решить можно несколькими способами. Самый простой с опытом сам видишь где эта херня точно может всплыть. Ну и проверки делать таки. Покурите Lombok например по этому поводу.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747795
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда тем более не понимаю.
Хочешь писать в "название метода" - пиши, хочешь отлавливать - отлавливай
Никто не запрешает.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class CheckedNPE {
	public static void myMethodWithNPE() throws NullPointerException {
		throw new NullPointerException();
	}

	public static void myMethodWithNPE_2() throws NullPointerException {
		Object o = null;
		String s = o.toString();
	}

	public static void main(String[] args) {
		try {
			myMethodWithNPE();
		} catch ( NullPointerException e1 ) {
			System.out.println( "NPE N 1");
		}
		try {
			myMethodWithNPE_2();
		} catch ( NullPointerException e1 ) {
			System.out.println( "NPE N 2");
		}
	}
}


...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747796
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ilya007,
По мне ошибка бд и ошибка null всплывает одинаково)
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747800
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ?

компилятор требует указывать чекед в троус метода - единственное различие. А то, что можешь или нет - это уже сахар.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747823
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,
+1
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747828
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747863
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМожет я тупой, а что такое проверяемое и не проверяемое ?

Может. Но и предыдущие ответы тупые, кроме ссылки, которую вы дали.

Проверяемое исключение - которое требует обработки в блоке try... catch... [finally]. Вместо того, чтобы делать обработку внутри метода, можно добавить его в throws метода, тогда try... catch будет нужно в коде, охватывающем вызов метода. Он может быть в другом методе, тогда опять надо решать - обрабатывать исключение в нём или вынести в throws. Но где-нибудь в программе catch будет. Для непроверяемых испключений использование try... catch необязательно. Для проверяемых исключений надо иметь ввиду приём - можно вместо try... catch использовать try... finally без catch и throws чтоб обработку производить в catch в коде, вызывающем метод.
Проверяемые исключения можно преобразовывать в непроверяемые и наоборот. Так что обработка исключений в Java не такая уж простая тема.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747885
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopХороший вопрос. Почему IOException проверяемое, а NPE нет.

Я загуглил и выделил такие критерии:
- придется везде явно писать что там может быть NPE поскольку много где идут операции с объектами
- причина выше делает код более уродливым
- свидетельствует об ошибке программиста

Ваши варианты? почему же все таки NPE это проверяемое исключение?

Проверяемые исключения- это те, которые возникают из-за внешних обстоятельств. Сеть умерла, БД сдохла, диск переполнился.
Непроверяемые - это ошибки в коде.
NPE - ошика в коде, без вариантов.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747901
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin,
Чего то не хватает, т.к. "внешние" и "ошибка в коде" не слова антонимы.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747904
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Tomin,
вот ту не совсем согласен. Если вот брать Spring к примеру. То там делают непроверяемые исключения если не хватает данных, не правильный логин или пароль и т.д. Но ведь это не значит что ошибка в коде.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747910
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
Добавка в имени метода тебе подходит.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747912
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominПроверяемые исключения- это те, которые возникают из-за внешних обстоятельств. Сеть умерла, БД сдохла, диск переполнился.
Непроверяемые - это ошибки в коде.
NPE - ошика в коде, без вариантов.

Создатели_JavaRuntime exceptions represent problems that are the result of a programming problem, and as such, the API client code cannot reasonably be expected to recover from them or to handle them in any way.


вот тут вот и начинается полное непонимание, как "API client code" может "recover from" "Сеть умерла, БД сдохла, диск переполнился".

Т.ч. IMHO все, что Вы перечислили, это как раз скорее RuntimeException, чем API Exception

а в целом, IMHO синтаксический сахар. Проверять и внятно обрабатывать (как минимум логировать) - никто не мешает.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39747944
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevвот тут вот и начинается полное непонимание, как "API client code" может "recover from" "Сеть умерла, БД сдохла, диск переполнился"
зависит от того - кто этот "client api". в идеале он может их корректно обработать, если знает, что они могут возникнуть. Как минимум не упасть, а выдать пользователю внятное сообщение или предложить повторить попытку (если например по timeout обломались). Однако на практике это исключение возможно придется прокинуть на X уровней вверх прежде чем мы достигнем того места, где мы можем "восстановиться".
Да, в каком-то смысле это сахар, т.к. мы явно заставляет пользователя API обратить внимание на проблемы, которые могут возникнуть независимо от его воли. Однако сахар этот не очень сладкий в виду других недостатков.
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748044
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, стратегия обработки ошибок последовательно шла так:

Возврат кода ошибки или dummy value(-1, NaN и т.д) ===> этот способ имеет следующие недостатки: не всегда найдется корректное dummy значение, ведь -1 может быть правильным значением 2) Так как сигнатура метода никак не описывает возможности ошибки, ее легко можно забыть обработать

Непроверяемые исключения ==> Это был следующий шаг, который позволял делать централизованную обработку ошибок, но все равно сама возможность ошибки никак не декларировалась и нужно было смотреть документацию и тд.

Проверяемые исключения ==> Это был эксперимент Java, насколько я знаю ни в одном другом промышленном языке такой конструкции так и не прижилось. Идея была в том, чтобы закодировать возможность ошибки в самой сигнатуре метода, вы обязаны предпринять какие-то действия(либо пробросить либо обработать), но недостатками было 1) захламление кода, когда метод может состоять из одной строчки полезного кода и 15 эксепшен хандлеры и 2) непредсказуемый флоу выполнения кода, вещь аналогичная goto, если крепко призадуматься.

Умные люди извлекли из этого урок и теперь мейнстримом является описывать возможность ошибок в качестве типа возвращаемого значения, и не только возможность ошибок, а опциоальность, асинхронность и т.д, что по научному называется effects. В данном случае программист всегда видит имеется ли возможность что вызываемый код вернет ошибку и имеет свободу извлечь значение из контейнерного типа или работать с контейнером, а реальное извлечение значение будет где-то наверху(в идеале во входной точке приложения). Таким образом ядро вашего кода остается pure(предсказуемым и без side-effectов), ошибку невозможно пропустить, но ваш флоу не может прерваться и уйти непонятно куда.

Что касается топика, и нуллпоинтеров, нет смысла кодировать такие проверки, а надо использовать тип Optional если есть какие-то возможности отсутствия значения. Если же нуллпоинтер выскакивает в другом месте, то это очевидная ошибка и программу надо прекращать ибо ваши assumptions о том что переменная будет не равна null оказались вдребезги разбиты суровойреальностью, и чтобы не навредить коду выше или ниже, лучше завершить JVM немедленно
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748052
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никЕсли же нуллпоинтер выскакивает в другом месте, то это очевидная ошибка и программу надо прекращать ибо ваши assumptions о том что переменная будет не равна null оказались вдребезги разбиты суровойреальностью, и чтобы не навредить коду выше или ниже, лучше завершить JVM немедленноВот так и получается, что авианосцы на боевом дежурстве оказываются небоеспособны, потому что решение о перезагрузке выпавшего в осадок компьютера системы управления огнём принимается, если правильно помню, за двенадцать часов.
"Персонал проинструктирован вводить данные в это поле".
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748065
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ника надо использовать тип Optional
стоит заметить, что сфера применения Optional узко ограничена, а NPE может возникнуть где угодно. например при доступе к параметрам метода или приведении типа
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748069
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaзабыл ника надо использовать тип Optional
стоит заметить, что сфера применения Optional узко ограничена, а NPE может возникнуть где угодно. например при доступе к параметрам метода или приведении типа

1) Приведение типов - зло.
2) Почему параметр не Optional?

Ну я про то и говорю, что когда есь разумные предпосылки того что объекта может и небыть и есть какой-то способ обойти это - тогда используем Optional, в других случаях даем JVM спокойно умереть от NPE
...
Рейтинг: 0 / 0
Почему NullPointerException не проверяемое исключение?
    #39748074
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник....даем JVM спокойно умереть от NPE
Как-то круто.

А если JVM это WebLogic с 100500 корпоративных пользователей и не законченными транзакциями, тоже даем "спокойно умереть от NPE" ?
...
Рейтинг: 0 / 0
25 сообщений из 190, страница 1 из 8
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему NullPointerException не проверяемое исключение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]