академический урок! Почему бы не показать применение исключений на человеческих примерах, а не на method1, method2, exceptions, exampleException?! Можно же рассмотреть случай, когда программа требует ввести число, а пользователь вводит символьную строку (NumberFormatException). Выловить и обработать исключение в случае выхода за диапазон массива (ArrayIndexOutOfBoundsException). Лайк авансом.
time frame -(временное ограничение) Исключения Теория 0-45 природа возникновения 2-25 Исключения Практика 4-33 Практика 6-00 Создаем класс Example с методом method1() который выбрасывает исключение при его выполнении. ( эмулируем событие когда у нас пошло что то не так). 10-08 Создание своего собственного исключения 13-30 Создаем в класс Example методом method2() который выбрасывает другое исключение NewException . Для того чтобы понять как и в каком порядке выбрасываются исключения.
Добрый день. Вам стоит в этот ролик добавить, что программа не падает, а продолжает работать в случае обработки возможного исключения. А в общем хорошее объяснение.
Можно было бы для конкретности привести пример функции в которой бы-- на ноль делить нельзя- выходило бы исключение.Или при вводе цифр с клавиатуры выходило бы исключение при вводе букв(например)
Я правильно понимаю, что в методе method1 при возникновении ошибки в работе кода (переполнение буфера/деление на ноль/открытие несуществующего файла) создаётся объект Exception и работа кода прерывается? Почему тогда при обычном вызове метода1 срабатывет создание исключения? И можно поподробнее описать логику работы try catch? Спасибо.
Не совсем так. В методе method1() исключение будет выбрасываться всегда, вне зависимости от ошибок, потому что мы бросаем это исключение принудительно. В реальной ситуации исключения выбрасываются не беспричинно, а при возникновении ошибки. Ну например при отсутствии файла или переполнении) А логика работы try/catch такова - если при исполнении кода внутри блока try возникает исключение, то ход программы приостанавливается в том месте, где произошла ошибка, производится проверка - есть ли блок catch, в котором указано исключение подходящего типа. Если там указано подходящее исключение, то начинает исполняться блок catch. Если неподходящее, то прерывается исполнение метода и исключение выбрасывается наружу, то есть в тот метод, который вызвал текущий метод, в котором мы находились. Там происходит точно такая же обработка исключения или выброс наружу по цепочке.
А какие типы исключений бывают? Мы используем класс Exception - он родительский для всех типов исключений и он ловит все типы или есть другие классы? И у нас в примере блок try/catch один, ежели мы в catch используем тип исключения для работы с файлами, а у нас возникнет исключение по адресации памяти, то оно по нему не отработает, а программа вывалится в систему с ошибкой, так? П.С. Забыл ещё спросить: А как настроить выброс исключения только при возникновении оного, а не безусловно, как в примере?
Очень правильный вопрос) Exception - родительский для всех исключений и catch(Exception e) будет перехватывать все исключения. Но есть одна тонкость - кроме Exception есть еще и Error. Они оба наследуются от Throwable. Но при этом перехватывать Error не нужно в 99% случаев, за исключением каких то стратегий перехвата вообще всего - например внутри фреймворков, серверов и т.п. Что касается исключения по адресации памяти(segfault?), так в Java его нет и быть не может(правда есть JNI, но это отдельный разговор)) Это было сделано специально, чтоб минимизировать количество ошибок.
Типов исключений ОЧЕНЬ много, перечислять нет смысла, разве что посмотреть всех наследников класса Exception - например Idea может показать список. Что касается выброса исключения при возникновении исключения, то выбрасывать его не нужно, нужно просто не перехватывать) Если же хочется выбрасывать исключение, если при проверке каких то условий метод посчитал, что возникла ошибка, то нужно использовать конструкцию throw new ИмяИсключения(...);
Я, наверное, не правильно выразился: не выбросить, а обработать исключение к примеру код почти из предыдущего урока: public void WriteFileException () { FileOutputStream output = new FileOutputStream(filename); String text =" blablabla"; byte [] byteText = text.getBytes; output.write(byteText); При вызове метода вывалится с ошибкой при содержимом filename несуществующее имя файла либо при аттрибутах существующего файла read-only? Как добавить обработчик, срабатывающий только при возникновении данного исключения, а не всегда вызываемый, как в примере?
Увы, чтобы понять эту тему - данного ролика недостаточно. Видео полезно тем, кто уже знает, что такое исключения. Были бы реальные примеры, чтобы понять - было бы здорово, а так(
Так, а почему рантайм эксепшен не показан? Почему файнал не показан? Почему иерархия не показана? Почему не сказано что мы можем просто предупредить, но ничего в коде не кинуть? И про множественные исключения не рассказано, где они через запятую. И не сказано про кидание эксепшена в трай кечь конструкции. В общем тут есть где развернуться, но много не сказано.