Наиболее распространенные проверенные и непроверенные исключения Java?

Насколько я понимаю, нет способа узнать, какие исключения вызывается методом, не просматривая документы API по одному.

Поскольку это не вариант, я хотел бы отменить исследование и спросить вас, какие из наиболее распространенных исключений и RuntimeExceptions вы столкнулись при работе с:

  • Кастинг
  • Массивы
  • Vector, ArrayList, HashMap и т.д.
  • IO (класс файла, потоки, фильтры,...)
  • Сериализация объектов
  • Темы (wait(), sleep() и т.д.)
  • или что-либо еще, что считается "базовой Java"

Я понимаю, что это может быть субъективным и скучным, но это для классного теста, и я действительно не знаю лучше.

Ответ 1

Предположим, что ниже java.lang, если я не укажу иначе:

  • Кастинг: ClassCastException
  • Массивы: ArrayIndexOutOfBoundsException, NullPointerException
  • Коллекции: NullPointerException, ClassCastException (если вы не используете автобоксинг, и вы его испортите)
  • IO: java.io.IOException, java.io.FileNotFoundException, java.io.EOFException
  • Сериализация: java.io.ObjectStreamException(AND ITS SUBCLASSES, который я слишком ленив, чтобы перечислять)
  • Темы: InterruptedException, SecurityException, IllegalThreadStateException
  • Потенциально общий для всех ситуаций: NullPointerException, IllegalArgumentException

Вам было бы полезно посмотреть страницы Java Summary Package Summary. Здесь один: http://java.sun.com/j2se/1.4.2/docs/api/java/io/package-summary.html p >

Ответ 2

NullPointerException

Ответ 3

Неконтролируемый список исключений
ArrayIndexOutOfBoundsException
ClassCastException
IllegalArgumentException
IllegalStateException
NullPointerException
NumberFormatException
AssertionError
ExceptionInInitializerError
StackOverflowError
NoClassDefFoundError

Проверенный список исключений
Исключение
IOException
FileNotFoundException
ParseException
ClassNotFoundException
CloneNotSupportedException
InstantiationException
InterruptedException
NoSuchMethodException
NoSuchFieldException

Ответ 4

java.lang:

  • ArithmeticException
  • ArrayIndexOutOfBoundsException
  • ClassCastException
  • ClassNotFoundException
  • CloneNotSupportedException
  • IllegalArgumentExcepion
  • IllegalMonitorStateException
  • IllegalThreadStateException
  • IndexOutOfBoundsException
  • InterruptedException
  • NullPointerException
  • NumberFormatedException

java.util:

  • ConcurrentModificationException

java.io:

  • EOFException
  • FileNotFoundException
  • IOException
  • NotSerializableException

Ответ 5

Как говорит Билл К. Проверенные исключения просты. Если редактор IDE/программы не дает вам быстрый способ увидеть метод javadocs или подписи, вам нужно его выбросить. Серьезно.

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

// ... not sure if 'obj' is null
if (obj != null) {
    obj.someMethod();
}
// ... not sure if 'obj' has the right type
if (obj instanceof Foo) {
    Foo foo = (Foo) obj;
}
// ... not sure if 'i' is in range
if (i >= 0 && i < array.length) {
    .... = array[i];
}

Вот почему я рекомендую это:

  • Тест на охрану на порядок эффективнее, чем бросание и исключение.
  • Защитный тест более читабельен... меньше строк кода.
  • Если вы поймаете неконтролируемое исключение, вы никогда не сможете быть уверены, что это произошло по причинам, которые, по вашему мнению, были; например:
    // obj might be null ...
    try {
        obj.doSomething();
    } catch (NullPointerException ex) {
        System.err.println("obj was null");  // WRONG!!!
        // the NPE could have happen inside doSomething()
    }
  • Если неконтролируемое исключение вызвано ошибкой, вы хотите получить стек и (в зависимости от приложения), которые НЕ МОЖЕТЕ восстановить.

Очевидно, что вы включаете только эти "охранные" проверки, когда ваше понимание кода говорит вам, что они необходимы! Так, например, если вы знаете, что "obj" должен быть не нулевым, а "i" должен находиться в радиусе действия, рекомендуется оставить чеки. Если вы оставите один тест слишком много, вы получите исключение... но это хорошо, потому что тогда вы можете использовать stacktrace, чтобы понять, почему ваше понимание кода было неправильным и, возможно, исправить базовую ошибку.

Ответ 6

Проверенные исключения просты, ваш редактор должен отображать javadocs при наведении/завершении имени метода.

Непроверенные, как правило, являются фактическими ошибками и даже не в javadocs чаще, чем нет. Я думаю, наиболее распространенным может быть IllegalArgumentException, любой метод, который имеет любую возможную комбинацию недействительных параметров, должен бросить его.

Ответ 7

Как искать подклассы java.lang.exception, например здесь

Лично я использую 2 проверенных исключения моего собственного TransientException для случаев, когда повторная попытка может работать. И InvalidRequestException для ошибок проверки.

Ответ 8

NumberFormatException

Ответ 9

  • Кастинг - ClassCastException

  • Массивы - ArrayIndexOutOfBoundsException

  • Vector, ArrayList, HashMap и т.д. - я редко вижу исключения при работе с коллекциями Java, но очень редко ConcurrentModificationException

  • IO (класс файла, потоки, фильтры,...) - FileNotFoundException

  • Сериализация объектов - ClassNotFoundException

  • Темы (wait(), sleep() и т.д.). По моему опыту, обычно проблемы с потоками проявляются случайными способами, которые не являются конкретными исключениями. Имея дело с InterruptedException, занимает много времени, хотя я не видел, чтобы исключение действительно сильно бросалось.

  • или что-либо еще, что считается "базовой Java" - безусловно, наиболее распространенным исключением в моем опыте является исключение NullPointerException.