Да, есть Три вида.
Проверенные исключения
Компилятор сообщит вам, когда они могут быть выброшены, скорее всего, из-за сбоя в среде.
Их следует поймать, если программа может что-то с этим сделать, в противном случае предпочтительнее отпустить их.
Большинство из них наследуются от
java.lang.Exception
или от
java.lang.Throwable
Хотя лучше наследовать от первого.
Например:
java.io.IOException
Сигналы о возникновении какого-либо исключения ввода-вывода. Этот класс является общим классом исключений, создаваемых ошибочными или прерванными операциями ввода-вывода.
Ошибка
Это особые виды исключений. Они НЕ ДОЛЖНЫ БЫТЬ , потому что когда они происходят, это означает, что что-то действительно очень плохое только что произошло.
Все они наследуются от
java.lang.Error
Например:
java.lang.OutOfMemoryError
Брошенный, когда виртуальная машина Java не может выделить объект, потому что ему не хватает памяти, и сборщик мусора больше не может сделать доступной память.
или
java.lang.StackOverflowError
Брошенный, когда переполнение стека происходит, потому что приложение возвращается слишком глубоко.
RuntimeExceptions
Используется для выявления сбоев программиста, а не сбоев ресурсов.
Исключение времени выполнения "обычно" можно избежать при кодировании. Если у вас есть один, скорее всего, вы делаете что-то не так.
Иногда ловятся исключения во время выполнения, но, если вы точно не знаете, что делаете, и почему , отлавливать их - плохая практика (опять же, если вам не нужно)
Они наследуются от
java.lang.RuntimeException
Например
java.lang.ArrayIndexOutOfBoundsException
Брошенный, чтобы указать, что к массиву обращались с недопустимым индексом. Индекс либо отрицательный, либо больше или равен размеру массива
или
java.lang.NullPointerException
Брошенный, когда приложение пытается использовать нуль в случае, когда требуется объект
О последних двух, МОСТ случаях, их можно избежать, тщательно программируя и понимая, в каком состоянии находится программа (есть ли в этом массиве 5 элементов? Зачем мне пытаться получить доступ - 1 или 6. Является ли эта ссылка нулевой? Почему я должен вызывать null.toString ())
Хотя у меня были споры с парнями, которые утверждают, что все NPE должны быть пойманы. Ну что тут скажешь.