Size: a a a

2021 January 02

N🌌

Nazarii 🌌 in learn.java
LDev 21
Почему нет? Одна ошибка обрабатывается (исправляется блоком catch), можно работать дальше. Не такая логика?
Нет. Ошибка -> переход в catch -> (finally {} ) -> выход из try-catch
источник

DC

Denis Chikanov in learn.java
Catch-блок не должен "исправлять" ошибку, он может (и как правило так и происходит) вообще только содержать, например, логирование ошибки
источник

L2

LDev 21 in learn.java
А в чем тогда смысл множественной обработки исключений?
источник

N🌌

Nazarii 🌌 in learn.java
LDev 21
А в чем тогда смысл множественной обработки исключений?
не накрыть всё к чертям при ошибке.
источник

DC

Denis Chikanov in learn.java
LDev 21
А в чем тогда смысл множественной обработки исключений?
В том, что у тебя ошибка может выскочить
а) в разных местах, а каждую строку в трай-кэтч оборачивать страшно
б) в одном месте, но не одна, а несколько разных, и они могут требовать разной обработки
источник

DC

Denis Chikanov in learn.java
Представь, что ты получаешь сообщение от клиента по сети - "не удалось открыть соединение" и "клиент прислал сообщение, не соответствующее протоколу" - разные ошибки, которые могут возникнуть, условно, в одном месте, и обрабатывать их надо, очевидно, совершенно по-разному
источник

L2

LDev 21 in learn.java
Почему тогда весь блок try-catch не обработать исключением Exception, зачем перехватывать индивидуальные? Я понимаю, если бы каждый блок catch срабатывал и исправлял свою ошибку, но нет же, срабатывает только первое исключение
источник

N🌌

Nazarii 🌌 in learn.java
LDev 21
Почему тогда весь блок try-catch не обработать исключением Exception, зачем перехватывать индивидуальные? Я понимаю, если бы каждый блок catch срабатывал и исправлял свою ошибку, но нет же, срабатывает только первое исключение
сообщением выше объяснили
источник

DC

Denis Chikanov in learn.java
LDev 21
Почему тогда весь блок try-catch не обработать исключением Exception, зачем перехватывать индивидуальные? Я понимаю, если бы каждый блок catch срабатывал и исправлял свою ошибку, но нет же, срабатывает только первое исключение
А если первого исключения не было, а второе было?
источник

L2

LDev 21 in learn.java
Да, я понимаю, что могут быть разные ошибки в одном блоке кода. Но обрабатывается все равно только одна из них
источник

DC

Denis Chikanov in learn.java
LDev 21
Да, я понимаю, что могут быть разные ошибки в одном блоке кода. Но обрабатывается все равно только одна из них
Ну да, но они же разные, и обрабатывать их надо совершенно по-разному
источник

L2

LDev 21 in learn.java
Denis Chikanov
А если первого исключения не было, а второе было?
Тогда в этом есть смысл. Но а что если есть две ошибки одновременно. Обрабатывается же только первая попавшаяся, вторая не обрабатывается?
источник

DC

Denis Chikanov in learn.java
LDev 21
Тогда в этом есть смысл. Но а что если есть две ошибки одновременно. Обрабатывается же только первая попавшаяся, вторая не обрабатывается?
А не может у тебя быть две ошибки "одновременно"
где-то в коде, который кидает ошибку, написано throw new MyCoolException() - и два исключения в одной такой строке ты не кинешь
источник

L2

LDev 21 in learn.java
Понял. Спасибо. Для чего блок finally нужен, если всё заключенное в нём выполнялось бы также как и без этого блока?
источник

GV

Gukov Viktor in learn.java
LDev 21
Понял. Спасибо. Для чего блок finally нужен, если всё заключенное в нём выполнялось бы также как и без этого блока?
Ресурсы чистить за собой
источник

DC

Denis Chikanov in learn.java
LDev 21
Понял. Спасибо. Для чего блок finally нужен, если всё заключенное в нём выполнялось бы также как и без этого блока?
Ээ, нет, у тебя например в блоке catch может быть return.
Finally всё равно выполнится.
источник

L2

LDev 21 in learn.java
Т.е после return не произойдёт выход из метода, а выполнится finally блок?
источник

DC

Denis Chikanov in learn.java
LDev 21
Т.е после return не произойдёт выход из метода, а выполнится finally блок?
Угу, а потом выход из метода.
источник

А

Алексей in learn.java
Вообще такого рода ошибки, если тебе нужно чтобы код продолжил работать, а не просто словил ошибку, то лучше их самому обрабатывать. Например, проверить индекс, не выходит ли за размеры массива если выходит, то задать новую длину массиву
источник

GV

Gukov Viktor in learn.java
Алексей
Вообще такого рода ошибки, если тебе нужно чтобы код продолжил работать, а не просто словил ошибку, то лучше их самому обрабатывать. Например, проверить индекс, не выходит ли за размеры массива если выходит, то задать новую длину массиву
Приведенный пример с массивом плохой кейс для использования try catch
источник