• ,

Уровень 9: план уровня и доп. материалы

План уровня:
  • Знакомство с исключениями: try, catch, throws, multy-catch.
  • Понятие стека. Коллекция Stack
  • Получение стека вызовов. StackTraceElement, метод getMethodName()
  • Знакомство с исключениями Exception
  • Перехват исключений — блок try… catch
  • Типы исключений: checked-контролируемые (чЕкет), unchecked-неконтролируемые (анчЕкет)
  • Exception, NullPointerException, ArithmeticException, IOException
  • Сигнатура метода, throws
  • RuntimeException, метод getMessage()
  • Захват исключений, корзина исключений

На этом уровне исключения рассматриваются поверхностно. Детальное углубленное изучение будет на 30+ уровнях.


Курс Java

Что еще можно посмотреть на досуге:
Разница исключений
Еще про исключения
Что такое «сигнатура метода»?

Почитать про исключения

Про StackTrace читаем тут на английском.

Ниже несколько видео про исключения:






Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария.
Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения

Вернуться к обучению java онлайн на JavaRush

66 комментариев

apcuk
  • apcuk
  • 0
первая «глава» девятой лекции про стэк-трэйс. приведен код:


public class ExceptionExample
{
    public static void main(String[] args)
    {
        method1();
    }

    public static void method1()
    {
        method2();
    }

    public static void  method2()
    {
        method3();
    }

    public static void method3()
    {
        StackTraceElement[] stackTraceElements =       Thread.currentThread().getStackTrace();
        for (StackTraceElement element : stackTraceElements)
        {
            System.out.println(element.getMethodName());
        }
    }

}


который должен выдать:

getStackTrace
method3
method2
method1
main

по факту у меня результатом исполнения этого кода является:

getStackTrace
method3
method2
method1
main
invoke0
invoke
invoke
invoke
main

откуда эти invoke и второй main?

столкнулся с этим при выполнении level09.lesson02.task04
Globus51
откуда эти invoke и второй main?
Globus51
откуда эти второй main и invoke?
aleczander
и правда, здорово было бы, если кто-то подробнее объяснил эту тему.
igor
invoke переводится как вызывать, что тут еще объяснять?)
aleczander
почему в примере говорится, что вывод этого кода без инвоуков, а на деле — с ними. Я об этом)
igor
А если сделать так, вопросы останутся?)
System.out.println(element.getMethodName()+" " +element.getClassName());

Вывод:

getStackTrace java.lang.Thread
method3 Test.Solution
method2 Test.Solution
method1 Test.Solution
main Test.Solution
invoke0 sun.reflect.NativeMethodAccessorImpl
invoke sun.reflect.NativeMethodAccessorImpl
invoke sun.reflect.DelegatingMethodAccessorImpl
invoke java.lang.reflect.Method
main com.intellij.rt.execution.application.AppMain
igor
А если запустить из консоли, то вывод будет:

getStackTrace java.lang.Thread
method3 Test.Solution
method2 Test.Solution
method1 Test.Solution
main Test.Solution
igor
  • igor
  • +1
  • Комментарий отредактирован 2014-04-07 17:27:43 пользователем igor
Все дело в том, что
<code>
invoke0 sun.reflect.NativeMethodAccessorImpl
invoke sun.reflect.NativeMethodAccessorImpl
invoke sun.reflect.DelegatingMethodAccessorImpl
invoke java.lang.reflect.Method
main com.intellij.rt.execution.application.AppMain</code>
Использует IntelliJ IDEA для запуска вашего кода
snuk
invoke и еще один main выводятся от IDE. В данном случае от IDEA. Я давал ссылки на подробный разбор этого момента в хелпе. Дабы не вдаваться в детали(они не нужны на самом деле), можно смело отметать у любого стектрейса 5 нижних строк, т.е. самую нижнюю и invoke0, не обращая на них внимания. Все что находится выше-ваш стек.
MaxST1994
У меня так же, моя версия что это остальные 3 потока… У вас же 4 ядра?
exis19ce
может кто-то объяснить что за «Null Pointer Exception»?
Arithmetic Exception — это понятно
Domkq
вот — тут про эту ошибку, если непонятно — закинь в переводчик) и вот ещё полезность
exis19ce
всё понял, только в голове один вопрос — можно ли, не заморачиватся, и всегда использовать просто Exception? ведь он перехватывает все ошибки…
Bessus
Перед тобой не стоит задача просто перехватить исключение, перед тобой стоит задача, чтобы код выполнил то, что от него требуется. А если тебе надо поймать определенную ошибку, а остальные пропустить? Или выполнить определенные действия, если возникнет определенное исключение?
Globus51
На нашем сайте, в уроке 9.4 «RuntimeException, throws» нас учат что NullPointerException это исключение, относящееся к типу checked.

А здесь, на этой странице в разделе «Что еще можно посмотреть на досуге:», если пройти по ссылке «Разница исключений» — то там говорится что
NullPointerException это исключение, относящееся к типу unchecked.

Какая-то нестыковка получается…
IvanDurov
Самое правильное у Oracle
NullPointerException наследован от RuntimeException.
Всё, что наследовано от RuntimeException — unchecked.
tarrus
Ух ты, администрации тоже нравиться этот лектор? Я сам частенько просматриваю его, очень хорошо объясняет.
Diana
Мы стараемся собрать на JavaRush ссылки на хороший материал. Наша цель — научить вас, и подача материала разными лекторами только приветствуется. Все люди разные: одним легче понять видео материал, другим — текстовый; одни — теоретики, другие — практики.
rmk
побольше таких видео к каждой лекции.)
HOS
+1
alexnjc
Еще круто для обучения — слайды, схемы, инфографика. Очень быстро и легко запоминается
rmk
+1
HOS
+1
Nazgul
Подскажите, что делает строчка:
RuntimeException e = (RuntimeException)exception;

Тема — механизм работы исключений.
6YJIb
приведение типов
rmk
  • rmk
  • 0
побольше таких видео к каждой лекции.)
lichMax
+1
iliyaboev
допустим мы написали свой класс MyException (исключение), так же есть абстрактный класс (с методом) и несколько подклассов. (например, один из подклассов -линия, а метод рассчитывает площадь)
Задача:
перехватить вызов метода(супер класса) подклассом, чтобы сработало исключение MyException (с каким нибудь текстом)
Класс исключения создал, а как перехватить- нигде не нашел:(
Munch
Интересует вопрос. StackTrace — вообще в джаве используется часто? Если да, то для каких практических целей именно?
darkstone
Если у тебя есть ошибка в программе, то как раз стэк тебе и печатается с указанием цепочки вызова и номером строки. Частота использования зависит он частоты наших ошибок! :)
lichMax
ага, метод printStackTrace()
Padme
Меня интересует строка
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
Подскажите, пожалуйста, почему метод getStackTrace() есть в StackTrace, а Thread.currentThread() — нет
Svejk
этот головачлена просто… как он Throwable произносит…
Ruzveld
ага, его сровЭйбл, Э'кстендс, булеан, чекед и тд — это жесть полная)
но признай, объясняет круто
antonchar
В видео все разжевано до мелочей. Не понять невозможно.
bskydive
Можно в текст лекции добавить ссылки на видео? Для тех, у кого не отображается встроенное видео без бубна.
i2save
Приветствую! Вот все же хотелось бы увидеть примеры, где необходимо использование стэк-трэйсов, ее вообще сущность использования.
Alex1
Насколько же проще с задачами все понять, сразу видна логика, без задач все равно пришлось бы экспериментировать с примерами.
sadv1r
В коде лекции пропущен пробел.
Nyarukou_Sama
В первой ссылке если не остановить загрузку, то перекинет на страницу 404. Если загрузку остановить (вовремя) то все норм, а там ведь много интересных вопросов. В чем проблема может быть, кто нибудь подскажет?
gadz
  • gadz
  • 0
  • Комментарий отредактирован 2015-08-17 19:47:35 пользователем gadz

Эта диаграмма красивее, чем в лекции.
Bushrut
Не хватает окраски checked — unchecked. Так же материал в лекции разница с видео. Касательно RuntimeException и Exception.
javaspace
  • javaspace
  • 0
  • Комментарий отредактирован 2015-10-18 21:23:02 пользователем javaspace
PS: Одно из преимуществ обработки исключений состоит в том, что она позволяет сосредоточиться на решаемой проблеме, а затем обработать все ошибки в описанном коде в другом местеГлавная ценность исключений в основном обусловлена именно передачей информации.
javaspace
И вот ещё «напоминалка» — Основные правила обработки исключении. Думаю поможет направить по верному пути при работе с исключениями в различных вариантах:

Используйте исключения для того, чтобы:
• обработать ошибку на текущем уровне (избегайте перехватывать исключения, если вы не знаете, как с ними поступить);
• исправить проблему и снова вызвать метод, возбудивший исключение;
• предпринять все необходимые действия и продолжить выполнение без повторного вызова метода;
• попытаться найти альтернативный результат вместо того, который должен был бы произвести вызванный метод;
• сделать все возможное в текущем контексте и заново возбудить это же исключение, перенаправив его на более высокий уровень;
• сделать все, что можно в текущем контексте, и возбудить новое исключение, перенаправив его на более высокий уровень;
• завершить работу программы;
• упростить программу (если используемая вами схема обработки исключений делает все только сложнее, значит, она никуда не годится);
• добавить вашей библиотеке и программе безопасности (сначала это поможет в отладке программы, а в дальнейшем окупится ее надежностью).
mrANDERSON
Hi!
Запустил код из 1й лекции и получил кроме
getStackTrace
method3
method2
method1
main

еще и
invoke0
invoke
invoke
invoke
main

Что это за invoke-и еще? Подскажите плз!
Спасибо!
remain4life
Уже писали выше подробно — это IDE выдаёт. При запуске из консоли нижних 5-ти строк не будет.
remain4life
Видео очень понравились, хотелось бы к каждой лекции таких)
snuk
  • snuk
  • 0
quizful
Более детальная статья по исключениям. В придачу там еще полезные комментарии.
GevEmperor
Moжет идиотский вопрос… Но где лекция 9 со своими пунктами??? Тут только оглавления и никаких ссылок.
AMTsurkanu
  • AMTsurkanu
  • 0
  • Комментарий отредактирован 2016-03-09 23:22:40 пользователем AMTsurkanu
Вот еще не плохая статья — javaswing.wordpress.com/2010/01/02/stacktrace_using/, и еще, лучшее из всего, документация Оракла — docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#getStackTrace()
MaxST1994
Сарабэйбл )

Но обьясняет доходчиво. Крутой Головач
invirtus
  • invirtus
  • 0
  • Комментарий отредактирован 2016-03-28 16:09:38 пользователем invirtus
Есть такой вопрос. В лекции говорится, что в сигнатуре метода надо перечислять все возможные исключения, которые метод может вызвать. А как я узнаю, какие исключения метод может вызывать? Я сам, при написании метода, исходя из его кода должен это предположить, так получается?
boyarskiy
Хорошая иллюстрация по иерархии класса Throwable, являющемся родителем для Error и Exception. На ней хорошо видно кто checked а кто unchecked.
piccy.info/view3/6322681/5051bae52a552fc365dca23b7672ee85/1200/
kornyana
отличный короткий текст — www.skipy.ru/technics/exceptions.html
всё, что нужно для начала понимания
irodream
Там дальше ещё интересней www.youtube.com/watch?v=j_ljOOvhf_k
Java Core July: Exceptions. Лекция #6 (Часть 2)

Почему важно использовать проверяемые исключения, почему важна инкапсуляция и кто останется работать на выходные.=)
cofrela
Тут еще можно почитать www.mari-el.ru/mmlab/home/PSHyper/lection7/index.htm
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.