кодесурса

Типы исключений

script1adsense2code
script1adsense3code

Вступление

Java - это объектно-ориентированный язык программирования. Исключением является объект, созданный во время исключительного состояния / ошибки, который будет выброшен из программы и остановит нормальное выполнение программы. Иерархия объектов Java-исключений следующая:


Все типы исключений являются подклассами встроенного класса Throwable. Таким образом, Throwable находится на вершине иерархии классов исключений. Сразу под Throwable находятся два подкласса, которые делят исключения на две разные ветви. Одна ветвь возглавляется исключением. Эта классика используется для исключительных условий, которые должны поймать пользовательские программы. Это также класс, который вы будете создавать подклассами для создания собственных типов исключений. Существует важный подкласс Exception, называемый RuntimeException. Исключения этого типа автоматически определяются для программ, которые вы пишете, и включают такие вещи, как деление на ноль и неверная индексация массива.

Другая ветвь превысила Ошибка, которая определяет исключения, которые не должны быть перехвачены вашей программой при нормальных обстоятельствах. Исключения типа Error используются системой времени исполнения Java для указания ошибок, связанных с самой средой исполнения. Переполнение стека является примером такой ошибки. Эта глава не будет иметь дело с исключениями типа Error, потому что они обычно создаются в ответ на катастрофические сбои, которые обычно не могут быть обработаны вашей программой.

Исключения Java можно разделить на два типа:

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

Как правило, проверяемые исключения являются объектом вылова или определяют требование, а это означает, что они требуют отлова или декларирования. Это требование является необязательным для непроверенных исключений. Код, использующий проверенное исключение, не будет компилироваться, если не будет соблюдено правило catch или define.

Непроверенные исключения бывают двух типов:

  • ошибки
  • Исключения во время выполнения

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

Проверенные исключения - это тип, который программисты должны ожидать и из которого программы должны быть в состоянии восстановиться. Все исключения Java являются проверенными исключениями, за исключением классов Error и RuntimeException и их подклассов.

Проверенное исключение - это исключение, с которым исходный код Java должен иметь дело, либо перехватывая его, либо объявляя, что он будет сгенерирован. Проверенные исключения обычно вызваны ошибками вне самого кода - на ум приходят пропущенные ресурсы, сетевые ошибки и проблемы с потоками. Они могут включать подклассы FileNotFoundException, UnknownHostException и т. Д.

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

название Описание
IOException При использовании файла вход / выход потока, связанных исключение
SQLException. При выполнении запросов к базе данных, связанных с синтаксисом SQL
DataAccessException Исключение связано с доступом к данным / базе данных
ClassNotFoundException Брошенный, когда JVM не может найти класс, в котором он нуждается, из-за ошибки командной строки, проблемы с classpath или отсутствующего файла .class
InstantiationException Попытка создать объект абстрактного класса или интерфейса.

Ниже приведен пример программы чтения файла, показывающей, как следует проверять исключение. На следующем рисунке показана ошибка времени компиляции из-за проверенного исключения (FileNotFoundException и IO Exception), связанного с файловой операцией. IDE предлагает либо нам нужно заключить наш код в блок try-catch, либо мы можем использовать ключевое слово throws в объявлении метода.


Мы обновим объявление метода с помощью ключевого слова throws, и вызывающий метод (основной метод) должен будет обработать это исключение. Я подробно объясню часть чтения файла в руководстве по вводу / выводу файла, здесь мы сконцентрируемся больше на части исключения. Во время работы программы мы можем столкнуться с двумя типами проблем (1) Файл отсутствует или отсутствует, который мы пытаемся прочитать (2) Пользователь не имеет разрешения на чтение файла или файл заблокирован другим пользователем. Поскольку мы ожидаем два разных типа исключений, мы должны перехватить оба исключения, или у нас может быть один блок catch, который перехватывает исключение суперкласса. Код ниже показывает синтаксис нескольких блоков catch.

Java-код: перейти к редактору

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class CheckedExceptionDemo {
	public static void main(String[] args) {
		//Below line calls readFile method and prints content of it
		String filename="test.txt";
		try {
			String fileContent = new CheckedExceptionDemo().readFile(filename);
			System.out.println(fileContent);
		} catch (FileNotFoundException e) {
			System.out.println("File:"+ filename+" is missing, Please check file name");
		} catch (IOException e) {
			System.out.println("File is not having permission to read, please check the permission");
		}
	}
	public String readFile(String filename)throws FileNotFoundException, IOException{
		FileInputStream fin;
		int i;
		String s="";
		fin = new FileInputStream(filename);
		// read characters until EOF is encountered
		do {
		i = fin.read();
		if(i != -1)  s =s+(char) i+"";
		} while(i != -1);
		fin.close();
		return s;
	}
}

Вывод: если test.txt не найден:

«»

Запуск программы после создания файла test.txt в корневой папке проекта

«»

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

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

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

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

название Описание
Исключение нулевого указателя Брошенный при попытке получить доступ к объекту со ссылочной переменной, текущее значение которой является нулем
ArrayIndexOutOfBound Выдается при попытке доступа к массиву с недопустимым значением индекса (либо отрицательным, либо за пределами длины массива)
IllegalArgumentException. Брошенный, когда метод получает аргумент, отформатированный иначе, чем метод ожидает.
IllegalStateException Выдается, когда состояние среды не соответствует предпринимаемой операции, например, с использованием закрытого сканера.
NumberFormatException Брошенный, когда метод, который преобразовывает строку в число, получает строку, которую он не может преобразовать.
ArithmaticException Арифметическая ошибка, такая как деление на ноль.

Мы видели пример программы исключений деления на ноль во время выполнения в последнем уроке, здесь мы увидим другую программу, которая будет принимать возраст пользователя как ввод и предоставлять доступ, если возраст больше 18 лет. Здесь пользовательский ввод ожидается в числовой форме, если пользовательский ввод другой алфавитный, тогда наша программа завершится в исключительном состоянии (InputMismatchException). Это исключение происходит во время выполнения. Мы можем решить обработать это программно, но это не обязательно обрабатывать. Исключения времени выполнения хороши для обработки с использованием блока try-catch и позволяют избежать возникновения ошибки.

Java-код: перейти к редактору

import java.util.Scanner;
public class RunTimeExceptionDemo {
	public static void main(String[] args) {
		//Reading user input
		Scanner inputDevice = new Scanner(System.in);
		System.out.print("Please enter your age- Numeric value: ");
		int age = inputDevice.nextInt();
		if (age>18){
			System.out.println("You are authorized to view the page");
			//Other business logic
		}else {
			System.out.println("You are not authorized to view page");
			//Other code related to logout
		}
	}
}

Выход:

«»

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

«»

Резюме:

  • Условие / выражение цикла может быть истинным всегда, что делает наш цикл бесконечным. Это плохая практика программирования, так как это может привести к исключению памяти. Нижеследующее утверждение действительно, но не очень хорошо в нашей программе.
  • С точки зрения функциональности Checked и Unchecked Exception одинаковы.
  • Проверено, что обработка исключений проверена во время компиляции, в то время как исключение Unchecked - это в основном ошибки программирования.
  • JDK7 предоставляет улучшенный код обработки исключений с перехватом нескольких исключений в одном блоке перехвата и сокращением количества строк кода, необходимых для обработки исключений.

Редактор кода Java:

Предыдущая: Обработка исключений
Далее: Custom Exception

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code