В чем разница между исключением и ошибкой

Java

В чем разница между исключением и ошибкой В чем разница между исключением и ошибкой

основной ответ

Общая основа:

Оба наследуют класс Throwable.В Java только Throwable или его подклассы могут быть брошены или перехвачены.

разница:
  • Ошибка: Маловероятная проблема при нормальных обстоятельствах. Подавляющее большинство Ошибок приводит к тому, что сама программа (например, JVM) оказывается в неизбежном, неисправимом состоянии. Так что нет нужды заниматься такими проблемами в программе.
  • Исключение: непредвиденная ситуация, которую можно ожидать при нормальной работе программы. Эта часть проблемы называется исключениями, и большинство из них может быть решено программистом в программе. Исключения далее делятся на проверенные исключения и исключения времени выполнения.
  • Checked exception (проверяемое исключение): Эта часть исключения должна быть обработана, если она не обработана в программе, то компиляция не пройдет. Существует два способа обработки этого типа исключений: один — использовать синтаксис try-catch для его обработки, а другой — продолжать выбрасывать (генерировать) этот тип исключения на более высокий уровень вызова. Наследование Exception может определить класс исключения проверки. Пример: IOException, FileNotFoundException, SQLException, ClassNotFoundException, FileAlreadyExistsException, CloneNotSupportedException
  • Исключение времени выполнения (RuntimeException): эта часть компилятора исключений не требует обработки разработчиком. Но этот тип исключения лучше всего объявить в подходящем месте (выбросить), чтобы при возникновении проблем в программе можно было его точно локализовать. Наследуйте RuntimeException, чтобы определить исключение времени выполнения. Пример: ClassCastException, NullPointerException, IndexOutOfBoundsException, ConcurrentModificationException

Как обрабатывать исключения:

  1. Уровень вызовов верхнего уровня throws (броски): Логика решения этой проблемы вынесена на верхний уровень.Если в дизайне программы имеется несколько модулей или иерархических связей, этот метод необходим, но его нельзя использовать.Все обрабатывается вызывающим уровнем верхнего уровня, а то, что должно обрабатываться вами, должно обрабатываться в вашей собственной программе;
  2. Синтаксис try-catch: обычно возникает исключение, поток умирает со стеком вызовов исключения, и цель синтаксиса try-catch состоит в том, чтобы предотвратить смерть программы в этом месте или чтобы программа могла выполняться дальше вниз И возникновение исключения никак не влияет на бизнес-логику, поэтому оно должно выполняться.

Советы: Вообще говоря, когда программа выполняется до определенного шага, если выполняются условия, определенные исключением, в это время будет сгенерирован объект исключения, и объект исключения завершит текущий поток.


Как использовать Исключение

  1. Старайтесь не перехватывать (Exception) или перехватывать (Throwable), так как исключения, специфичные для перехвата, вернут более подробную информацию. Более того, big catch exception обычно не гарантирует, что программа имеет возможность выполнения down (происходит OOM, и программа не может справиться с такой проблемой), либо нет гарантии, что возникновение исключения не повлияет на бизнес-логику .
  2. Мы хотим убедиться, что программа не перехватывает исключения, которые мы не хотим перехватывать. Пример: RuntimeException следует распространять, а не перехватывать.
  3. Не проглатывать исключение, то есть ловить исключение, не игнорировать его;
  4. В продукте метод printStackTrace() должен больше выводить в лог, а не печатать его прямо в программе;
  5. Бросай рано, лови поздно принцип. Возникающее исключение должно быть сгенерировано как можно скорее для облегчения позиционирования; исключение должно быть обработано как можно ближе к тому месту, где возникло исключение, или сгенерировано на более высокий уровень;
  6. В случае обеспечения достаточной диагностической информации следует максимально избегать вывода конфиденциальной информации (личной информации пользователя);

Споры о проверенных исключениях

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

Влияние исключений на производительность

  1. Синтаксис try-catch повлияет на оптимизацию кода JVM, поэтому блок кода try-catch также следует описывать меньше;
  2. Хотя метод try-catch может выполнять некоторую логическую обработку, с точки зрения производительности старайтесь этого не делать;
  3. Каждый раз, когда Java создает исключение, создается снимок текущего стека, что является относительно сложной операцией; основной ответ Общая основа: Оба наследуют класс Throwable.В Java только Throwable или его подклассы могут быть брошены или перехвачены.

разница: Ошибка: Маловероятная проблема при нормальных обстоятельствах. Подавляющее большинство Ошибок приводит к тому, что сама программа (например, JVM) оказывается в неизбежном, неисправимом состоянии. Так что нет нужды заниматься такими проблемами в программе. Исключение: непредвиденная ситуация, которую можно ожидать при нормальной работе программы. Эта часть проблемы называется исключениями, и большинство из них может быть решено программистом в программе. Исключения далее делятся на проверенные исключения и исключения времени выполнения. Checked exception (проверяемое исключение): Эта часть исключения должна быть обработана, если она не обработана в программе, то компиляция не пройдет. Существует два способа обработки этого типа исключений: один — использовать синтаксис try-catch для его обработки, а другой — продолжать выбрасывать (генерировать) этот тип исключения на более высокий уровень вызова. Вы можете определить проверенный класс исключений, унаследовав его от Exception. Пример: IOException, FileNotFoundException, SQLException, ClassNotFoundException, FileAlreadyExistsException, CloneNotSupportedException Исключение времени выполнения (RuntimeException): эта часть компилятора исключений не требует обработки разработчиком. Но этот тип исключения лучше всего объявить в подходящем месте (выбросить), чтобы при возникновении проблем в программе можно было его точно локализовать. Наследуйте RuntimeException, чтобы определить исключение времени выполнения. Пример: ClassCastException, NullPointerException, IndexOutOfBoundsException, ConcurrentModificationException Как обрабатывать исключения:

Уровень вызовов верхнего уровня throws (броски): Логика решения этой проблемы вынесена на верхний уровень.Если в дизайне программы имеется несколько модулей или иерархических связей, этот метод необходим, но его нельзя использовать.Все обрабатывается вызывающим уровнем верхнего уровня, а то, что должно обрабатываться вами, должно обрабатываться в вашей собственной программе; Синтаксис try-catch: обычно возникает исключение, поток умирает со стеком вызовов исключения, и цель синтаксиса try-catch состоит в том, чтобы предотвратить смерть программы в этом месте или чтобы программа могла выполняться дальше вниз И возникновение исключения никак не влияет на бизнес-логику, поэтому оно должно выполняться. Советы: Вообще говоря, когда программа выполняется до определенного шага, если выполняются условия, определенные исключением, в это время будет сгенерирован объект исключения, и объект исключения завершит текущий поток.

Как использовать Исключение Старайтесь не перехватывать (Exception) или перехватывать (Throwable), так как исключения, специфичные для перехвата, вернут более подробную информацию. Более того, big catch exception обычно не гарантирует, что программа имеет возможность выполнения down (происходит OOM, и программа не может справиться с такой проблемой), либо нет гарантии, что возникновение исключения не повлияет на бизнес-логику . Мы хотим убедиться, что программа не перехватывает исключения, которые мы не хотим перехватывать. Пример: RuntimeException следует распространять, а не перехватывать. Не проглатывать исключение, то есть ловить исключение, не игнорировать его; В продукте метод printStackTrace() должен больше выводить в лог, а не печатать его прямо в программе; Бросай рано, лови поздно принцип. Возникающее исключение должно быть сгенерировано как можно скорее для облегчения позиционирования; исключение должно быть обработано как можно ближе к тому месту, где возникло исключение, или сгенерировано на более высокий уровень; В случае обеспечения достаточной диагностической информации следует максимально избегать вывода конфиденциальной информации (личной информации пользователя); Споры о проверенных исключениях Проверяемые исключения — это предположение, что мы перехватываем исключение и затем возобновляем работу программы, однако в реальной разработке это случается редко, теперь его использование отклоняется от цели его разработки; Проверенные исключения не поддерживают функциональное программирование; Влияние исключений на производительность Синтаксис try-catch повлияет на оптимизацию кода JVM, поэтому блок кода try-catch также следует описывать меньше; Хотя метод try-catch может выполнять некоторую логическую обработку, с точки зрения производительности старайтесь этого не делать; Каждый раз, когда Java создает исключение, создается снимок текущего стека, что является относительно сложной операцией; Markdown 1771 байт 61 слово 29 строк Ln 1, Col 0 HTML 1644 символа 37 слов 27 абзацев