Обработка исключений в Java [с примерами]

Опубликовано: 2020-11-12

Исключения — это нежелательные и неожиданные события программы, которые никогда не нужны программисту, но с которыми приходится сталкиваться много раз. Хорошая сторона заключается в том, что с помощью объектно-ориентированного языка Java можно смягчить эти нежелательные события с помощью концепции, называемой «Обработка исключений в Java ». Он не исправляет исключение, а предоставляет альтернативный способ справиться с ним.

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

Теперь, когда мы получили представление об исключениях и обработке исключений, давайте углубимся в них подробно, а также поймем, как Java помогает в обработке исключений.

Читать: Вопросы интервью по обработке исключений

Оглавление

Что такое обработка исключений?

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

java.lang.Exception является родительским классом для всех классов исключений. Класс Exception является подклассом встроенного класса Throwable , который является подклассом класса Object . Помимо Exception, Throwable также имеет другой класс, т.е. Error, который представляет собой ненормальное состояние во время выполнения программы, которое не может быть обработано программами Java, что является основным отличием между Error и Exceptions.

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

Исключения Java

Корневыми причинами исключений являются те, которые вызваны программистом или физическими ресурсами, которые вышли из строя по тем или иным причинам. Исходя из этого, в Java в основном существует две категории исключений, как показано ниже:

  1. Проверенное исключение
  2. Непроверенное исключение

1. Проверенное исключение

Проверенные исключения известны как «исключения времени компиляции», поскольку они проверяются во время компиляции компилятором, чтобы контролировать, обрабатывается ли исключение программистом. Затем система выдает ошибку компиляции.

Некоторыми примерами этих исключений являются IOException , Читайте: Идеи проекта Java для начинающих

2. Непроверенное исключение

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

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

Проверено против непроверенного исключения

Отличительные черты Проверяемое исключение Непроверенное исключение Время обработки Проверенные исключения проверяются и обрабатываются во время компиляции. Unchecked Исключения не проверяются во время компиляции.
Идентификация исключения Программа выдает ошибку компиляции, если метод выдает проверенное исключение. Программа компилируется нормально, так как компилятор не может проверить исключение.
Наследование Они не наследуют класс RuntimeException. Они являются подклассами класса RuntimeException.
Роль разработчика Может решаться разработчиками. Не могут быть обработаны разработчиками.

Понимание исключений — это первый шаг перед их обработкой.

Как Java помогает в обработке исключений?

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

Пример проверенного исключения:

Это программа для чтения файла с именем «Java». Есть три места, где выдается проверенное исключение:

  1. FileInputStream: используется для указания пути к файлу и имени throw FileNotFoundException .
  2. Метод read(): Чтение содержимого файла вызывает IOException ;

III. Метод close(): закрытие входного потока файла вызывает IOException .

импортировать java.io.*;

пример класса {

public static void main( String args[])

{

FileInputStream fis = null ;

/*Конструктор FileInputStream(имя файла)

* генерирует проверенное исключение FileNotFoundException */

fis = новый FileInputStream ( "B:/java.txt" );

инт к;

/* Выдает метод read() класса FileInputStream

* проверенное исключение: IOException

*/

в то время как (( k = fis.read() ) != – 1 )

{

Система . вне . напечатать (( символ )k);

}

/*Метод close() закрывает входной поток файла

* бросает IOException*/

fis.close();

}

}

Вывод вышеуказанной программы:

Исключение обнаружено в потоке «main» java.lang. Ошибка : нерешенные проблемы компиляции:

Обнаружено необработанное исключение FileNotFoundException

Обнаружено необработанное исключение IOException

Обнаружено необработанное исключение IOException

Причина этой ошибки компиляции: отсутствие объявления или обработки исключений.

Обязательно к прочтению: Java-проекты GitHub

Методы обработки исключений

Существует два способа обработки исключений, описанные ниже:

Способ 1: Объявление ключевого слова исключения 'throws'

В приведенной выше программе все три проверенных исключения находятся внутри метода main(). Таким образом, один из способов избежать ошибки компиляции — объявить исключение в методе с помощью ключевого слова 'throws'. Поскольку IOException является родительским классом для FileNotFoundException, он также охватывает это.

Обновленная программа с использованием ключевого слова throws:

импортировать java.io.*;

пример класса {

public static void main( String args[]) выдает исключение IOException

{

FileInputStream fis = null ;

fis = новый FileInputStream ( "B:/java.txt" );

инт к;

в то время как (( k = fis.read() ) != – 1 )

{

Система . вне . напечатать (( символ )k);

}

fis.close();

}

}

Выход:

Отобразить содержимое файла на экране.

Способ 2. Обработка исключений с помощью блоков try-catch.

Это более продвинутый подход к описанному выше и одна из лучших практик обработки исключений . Измененный программный код, включая блоки try-catch, выглядит следующим образом:

импортировать java.io.*;

пример класса {

public static void main( String args[])

{

FileInputStream fis = null ;

попробуй {

fis = новый FileInputStream ( "B:/java.txt" );

} поймать ( FileNotFoundException fnfe){

Система . out .println ( «Файл не является « +

«присутствовать на указанном пути» );

}

инт к;

попробуй {

в то время как (( k = fis.read() ) != – 1 )

{

Система . вне . напечатать (( символ )k);

}

fis.close();

} поймать ( IOException ioe){

Система . out .println ( «Ошибка ввода-вывода» +ioe);

}

}

}

Выход:

Этот код в конечном итоге отобразит содержимое файла.

Пример непроверенного исключения

Исключения Unchecked не проверяются во время компиляции. Программа не выдаст ошибку компиляции, если она не объявлена ​​или не обработана, и будет работать нормально. Задача разработчика состоит в том, чтобы заранее предсказать условия, которые могут возникнуть, вызывая такие исключения, и обработать их. Все исключения Unchecked являются подклассами класса RuntimeException .

пример класса {

public static void main( String args[])

{

целое число1= 10 ;

целое число2 = 0 ;

/*Деление любого числа на 0

* Вызовет ArithmeticException

*/

целое число = число1 /число2;

Система . вне .println (разрешение);

}

}

Код будет успешно скомпилирован с этим кодом, но во время выполнения он вызовет исключение ArithmeticException , поскольку непроверенные исключения не проверяются во время компиляции. Давайте посмотрим на другой пример.

пример класса {

public static void main( String args[])

{

интервал [] = { 1 , 2 , 3 , 4 , 5 };

/* В массиве 5 элементов, но мы хотим

* отображать значение 8-го элемента. Это бросит

* ArrayIndexOutOfBoundsException

*/

Система . вне .println (обр[ 7 ]);

}

}

Этот код также будет успешно скомпилирован, поскольку ArrayIndexOutOfBoundsException является непроверяемым исключением.

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

Обработка вышеуказанного исключения кода с помощью блока try-catch

пример класса {

public static void main( String args[]) {

попробуй {

интервал [] = { 1 , 2 , 3 , 4 , 5 };

Система . вне .println (обр[ 7 ]);

}

поймать ( ArrayIndexOutOfBoundsException e) {

Система . out .println ( «Указанный индекс не существует» +

«в массиве». );

}

}

}

Выход:

Указанный индекс не существует в массиве.

Примечание. Внутри блока try может быть несколько блоков catch для обработки разных исключений.

Способ 3 : использование ключевого слова «наконец-то»

Иногда бывает так, что код нужно выполнить, даже если возникает исключение. Здесь используется последнее ключевое слово. Вот типичный код с ключевым словом «наконец».

public int getPlayerScore (String playerFile)

бросает FileNotFoundException {

Содержимое сканера = ноль;

пытаться {

содержимое = новый сканер ( новый файл (файл игрока));

вернуть Integer.parseInt(contents.nextLine());

} наконец {

если (содержимое != null ) {

содержимое.закрыть();

}

}

}

Здесь последний блок указывает код, который мы хотим, чтобы Java запускала при попытке чтения файла.

Даже если выброшено исключение FileNotFoundException , Java вызовет содержимое finally .

Мы можем обработать исключение , изменив код, как показано ниже:

public int PlayerScore (String playerRuns) {

Содержимое сканера;

пытаться {

содержимое = новый сканер (новый файл (playerRuns));

вернуть Integer.parseInt(contents.nextLine());

} поймать (FileNotFoundException noFile) {

logger.warn("Файл не найден.");

вернуть 0;

} наконец {

пытаться {

если (содержимое != ноль) {

содержимое.закрыть();

}

} поймать (IOException ioexc) {

logger.error("Не удалось закрыть программу чтения", ioexc);

}

}

}

Заключение

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

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

Если вам интересно узнать больше о Java и разработке полного стека, ознакомьтесь с дипломом PG upGrad и IIIT-B по разработке программного обеспечения с полным стеком. Он тщательно разработан для профессионалов и обеспечивает всестороннюю поддержку карьеры и включает в себя живые проекты для работы. К концу курса вы сможете проектировать и создавать такие приложения, как Swiggy, IMDB и т. д.

Разве это не звучит захватывающе!

Станьте разработчиком полного стека

ДИПЛОМ PG UPGRAD И IIIT-BANGALORE В РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Узнать больше