Подтвердить что ты не робот

Невозможно обработать исключенные исключения java с помощью блока try/catch?

В учебнике я нашел , что Unchecked Exception не может обрабатываться вашим кодом, т.е. мы не можем использовать блок try/catch, а примеры - это исключения, такие как ArrayIndexOutOfBoundsException, NullPointerException.. Но эти исключения могут быть обрабатывается с помощью блока try/catch. Я думаю, что я не совсем понимаю концепцию!

Также я думаю, что ключевое слово throw может использоваться только с try/catch block.can throw Ключевое слово будет использоваться с UncheckedException?

4b9b3361

Ответ 1

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

Unchecked Exception не может обрабатываться вашим кодом, то есть мы не можем использовать блок try/catch

Конечно, мы можем - но нам этого не нужно.

Также я думаю, что ключевое слово throw может использоваться только с try/catch block.can throw Keyword будет использоваться с Unchecked Exception?

Обратите внимание, что есть два ключевых слова:

  • throw явно выдает созданный объект исключения. throw new NullPointerException(); работает отлично, хотя явное создание этого конкретного исключения является необычным, и большинство из них считают его плохим.
  • throws объявляет, что метод может исключить это исключение. Исключая исключения, это необязательно, но может быть полезно для документирования факта (опять же, обычно не объявлялся throws NullPointerException, потому что это в значительной степени данный).

Ответ 2

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

public void m() throws RuntimeException {}

Или вы можете catch их:

public void m() {
    try {
        // some code
    } catch (RuntimeException re) {
        // do something
    }
}

Следует заметить, что класс RuntimeException действует как исключение для исключенных исключений (так как все неисчерпаемые исключения распространяются от него), так же, как класс Exception является catch-all для проверенных исключений.

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

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

Ответ 3

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

Обычно нижняя строка заключается в том, что если клиент может разумно ожидать восстановления от исключения, то это должно быть проверенное исключение. Если клиент не может ничего сделать, чтобы восстановиться из исключения, тогда это нормально, чтобы он был как unchecked exception.

Кроме того, проверенные исключения полезны для документирования API, который вы ожидаете использовать третьими сторонами. Когда они знают, что ваш метод может бросить конкретное исключение, они будут соответствующим образом кодировать и обрабатывать случай. Если вы используете только непроверенные исключения, все ставки отключены.

Обычный шаблон (некоторым людям это не нравится, но в некоторых случаях это нормально, когда вы знаете, что вы делаете) заключается в том, чтобы обернуть проверенные исключения в непроверенные.

try {
   ... code that can throw CheckedException ...
} catch (CheckedException oopsSomethingBadHappened) {
    throw new RuntimeException("Something bad happened!", oopsSomethingBadHappened);
}

Ответ 4

Легкий способ подумать о различии состоит в том, чтобы думать, что проверка относится к компиляции. Если исключение является проверенным исключением, компилятор проверяет, что ваш код либо генерирует исключение, либо обрабатывает его в блоке try/catch во время компиляции. Для непроверенных исключений компилятор не будет выполнять такую ​​проверку. Вы можете обрабатывать проверенные/непроверенные исключения одинаково (с try/catch/throws), разница просто заключается в проверках, выполняемых компилятором. Этот пост имеет достойный пример.

Ответ 5

В дополнение к Гийому:

  • Исключенные исключения - это, как правило, ошибки программирования, которые не должны возникать вообще, если они выполняются правильно (индекс из привязанного, нулевого указателя, класс cast,...), и поэтому вызывающий/пользователь обычно ничего не может с ними поделать.
  • проверены исключения, потому что они были вне контроля программиста (сеть недоступна, файловая система недоступна, параллельные модификации, такие как дублированный первичный ключ,...)
  • Обычно ошибки запускаются JVM, и обычно приложение останавливается (из памяти, переполнение стека,...)

Ответ 6

Да, вы можете исключить исключенные исключения с помощью throw. И да, вы можете поймать непроверенные исключения в блоке catch.

Ответ 7

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

  • Если ваше приложение большое, многие разработчики вызывают друг друга API. Лучше обработать непроверенное исключение, иначе в конце произойдет сбой вашей программы, который остановит другие функции. Таким образом, даже простое исключение NullPointerException может остановить работу вашей программы.

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

Ответ 8

да, мы можем обрабатывать Runtime Exception, plz проверить ниже код

public class Demo {
  static void m1() {
    int a[]=new int [5];
    try {
    a[12]=2;
    }catch(Exception e) {

    }
  }

  public static void main(String[] args) {
    m1();
   try {
    String s=null;

    System.out.println(s.length());
   }catch(Exception e) {

   }
    System.out.println("hello world");
  }
}