Исключение, кроме RuntimeException - PullRequest
2 голосов
/ 20 января 2009

Есть ли вероятность возникновения исключений, кроме RuntimeException в Java? Спасибо.

Ответы [ 3 ]

12 голосов
/ 20 января 2009

Да, есть Три вида.

Проверенные исключения

Компилятор сообщит вам, когда они могут быть выброшены, скорее всего, из-за сбоя в среде.

Их следует поймать, если программа может что-то с этим сделать, в противном случае предпочтительнее отпустить их.

Большинство из них наследуются от

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 должны быть пойманы. Ну что тут скажешь.

6 голосов
/ 20 января 2009

Пакет java.lang определяет следующие стандартные классы исключений, которые не являются исключениями времени выполнения:

  • ClassNotFoundException : это исключение выдается, чтобы указать, что класс, который должен быть загружен, не найден.

  • CloneNotSupportedException : это исключение выдается, когда вызывается метод clone () для объекта, который не реализует интерфейс Cloneable и, следовательно, не может быть клонирован.

  • Исключение : соответствующий подкласс этого исключения генерируется в ответ на ошибку, обнаруженную на уровне виртуальной машины. Если программа определяет свои собственные классы исключений, они должны быть подклассами класса Exception.

  • IllegalAccessException : это исключение выдается, когда программа пытается динамически загрузить класс (т. Е. Использует метод forName () класса Class или findSystemClass () или метод loadClass () класса ClassLoader) и выполняемый в настоящее время метод не имеет доступа к указанному классу, поскольку он находится в другом пакете и не является общедоступным. Это исключение также выдается, когда программа пытается создать экземпляр класса (то есть использует метод newInstance () класса Class), у которого нет конструктора с нулевым аргументом, доступного для вызывающей стороны.

  • InstantiationException : Это исключение выдается в ответ на попытку создания экземпляра абстрактного класса или интерфейса с помощью метода newInstance () класса Class.

  • InterruptedException : Это исключение выдается, чтобы сигнализировать о том, что поток, который находится в спящем режиме, ожидает или иным образом приостановлен, был прерван другим потоком.

  • NoSuchFieldException : это исключение выдается, когда указанная переменная не может быть найдена. Это исключение является новым в Java 1.1.

  • NoSuchMethodException : это исключение выдается, когда указанный метод не может быть найден.

2 голосов
/ 20 января 2009

В основном в Java (в отличие от .NET) у вас есть два типа исключений:

  • Проверено исключение: все классы, которые наследуются от исключения. Клиентский код должен обрабатывать такого рода исключения (принудительно вводимые в компиляторе) с помощью предложения try-catch или throws.
  • Непроверенное исключение: все классы, наследуемые от RuntimeException. Код клиента не должен обрабатывать исключения такого типа.

Могу ли я предложить следующее O'Reilly On Java Статья об исключении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...