Java throw в блоке catch

Java throw в блоке catch

правильно ли понимаю, что когда я работаю с проектом, в котором есть несколько потоков исполнения, может быть вот такая ситуация. Один из этих потоков запускается и завершается успешно, а затем выбрасывает исключение внутри блока try-catch. Оставшиеся потоки исполнения продолжают свою работу, но никакой код в блоке finally не выполняется. Тогда блок finally при обработке исключений не будет выполнен?

я читаю про исключения на 1м и в принципе понимаю, но не очень. ps: зачем только я начал с java core. pss: если вы это читаете, и я до сих пор на первом, то либо я прохожу другой курс, либо читаю книгу по джаве, параллельно проходя этот курс, либо решил взять перерыв на неопределенный срок времени. никогда не сдамся)

Есть подозрение, что так будет правильнее.

обращу внимание на некоторую неточность. цитата «Создание исключения При исполнении программы исключение генерируется JVM или вручную, с помощью оператора throw» в java исключения это тоже объекты поэтому создается исключение так же как объект new Exception. а бросается в программе с помощью оператора throw. обычно эти операции объединяют в одну throw new Exception(«aaa»);

если что я пишу это с 3 уровня. Под конец лекций я читал статью про бафридер, после нашел там ссылку на потоки вводов, а потом чтобы понять что там говориться ввел гугл про исключение и нашел эту статью, спасибо автору, это статья очень помогла. PS если ты читаешь этот комментарий и видишь что у меня нет прогресса(то есть если я все еще на 3 уровне или чуточку больше), то скажи мне, что я нуб и не дошел до 40 лвла

Читайте также:  Cloud implementation in java

Источник

Java throw в блоке catch

Разберись, что делает программа. В блоке catch выведи на экран переменную answer и брось дальше пойманное исключение.

3. Ключевое слово finally

Еще один важный момент. Иногда программисту нужно сделать некоторые действия независимо от того, было исключение в коде или нет. Например, в коде мы открыли файл на запись, а открытый файл нужно обязательно закрыть вызовом метода close() .

try < код, где может возникнуть ошибка > catch(ТипИсключения имя) < код обработки исключения > finally < код, который нужно выполнить в любом случае >

Для выполнения таких обязательных действий к оператору try-catch добавили еще один блок — finally , и получился оператор try-catch-finally . Выглядит это дело примерно так:

FileInputStream source = null; try < source = new FileInputStream("c:\\note.txt"); source.read(); >catch(Exception except) < System.out.println("Перехватили исключение"); throw except; > finally

Код в блоке finally выполнится в любом случае независимо от того, было исключение или не было. Даже если исключение возникло, и оно не было перехвачено, блок finally все равно выполнится.

Кстати, если вы не хотите перехватывать исключение, а блок finally вам нужен, используйте сокращенную запись блока try-catch-finally — try-finally . Выглядит это примерно так:

try < код, где может возникнуть ошибка > finally < код, который нужно выполнить в любом случае >

Запусти программу и посмотри, что происходит. В методе eat добавь блок finally, чтобы лев ложился спать, даже если ему не удалось перекусить. Ожидаемый вывод в случае, когда food != null: ищет еду нашел мясо все съел лег спать Ожидаемый вывод когда food == null: ищет еду ничего не нашел

Java-университет

для тех, кто хочет разобраться в принципе покупки слона (пример с 2 ответами «не хочу» и «ок»): 0) рекурсивный метод можно сравнить со своеобразным циклом, витки которого (фреймы) не накладываются поверх по завершению предыдущего, а вкладываются внутрь до завершения предыдущего 0.1) при этом фрейм это не внутренний цикл, а, по сути, следующий, равноправный, но младший по иерархии виток цикла 1) первый фрейм рекурсивного метода buyElephant запускается с аргументом String по умолчанию (null), печатается требование «Купи слона» 1->2) вы вводите первый ответ «не хочу», и запускается 2-й фрейм метода с аргументом String «не хочу» 1.1) при этом из незавершенного 1-го фрейма начинается сканирование нового 2-го фрейма на исключение 1.2) (при запуске второго фрейма первый фрейм не разрывается и ждет выполнения второго) 2) выводится сообщение «Все говорят «не хочу», а ты купи слона», вы расстраиваетесь 2->3) вы вводите второй ответ «ок», и запускается 3-й фрейм метода с аргументом String «ок» 2.1) при этом из незавершенного 2-го фрейма (вложенного в незавершенный 1-й фрейм) начинается сканирование нового 3-го фрейма на исключение 3) а вот и оно. логика метода печатает «Так-то лучше 🙂 Список твоих отговорок:» и бросает исключение в 3-м фрейме. 3.1) 3й фрейм завершается на полпути и вылетает из рекурсии (продолжение в комментарии, тлдр не влезаит)

прошлые лекции были значительно лучше. эта слишком короткая и в данном случае кратность не сестра таланта. Например, толком не объяснено что делает throw. Лишь слово «выбрасывание», но все равно довольно непонятно. по поводу своих исключений, тема гораздо обширнее. можно создавать свои исключения, вводить в них фразы которые должны быть выведены на экран, создать класс унаследованный от Exception и так далее. Здесь же мы видим лишь следующую строчку «throw new RuntimeException();» что по сути даже не собственное исключение, а лишь созданное нами одно из стандартных исключений (подраздел следует переименовать чтоб не вводить в заблуждение и не путать, это создание исключения, а не своё исключение) Как по мне, стоит переработать лекцию. Первый раз когда я пишу негативный комментарий

 catch (NullPointerException e) < System.out.println("ничего не нашел"); // return; >

Источник

Оцените статью