В Java, изключение е събитие, което възниква по време на изпълнение на програма и нарушава нормалния поток на инструкциите на програмата. Бъгове или грешки, които не желаем и ограничават нормалното изпълнение на кода на нашата програма, се наричат изключения . В този раздел ще се съсредоточим върху видове изключения в Java и разликите между двете.
Изключенията могат да бъдат категоризирани по два начина:
- Вградени изключения
- Отметнато изключение
- Неотметнато изключение
- Дефинирани от потребителя изключения
Вградено изключение
Изключения които вече са налични в Java библиотеки се означават като вградено изключение . Тези изключения са в състояние да дефинират ситуацията на грешка, така че да можем да разберем причината за получаване на тази грешка. Може да се категоризира в две широки категории, т.е. проверени изключения и непроверено изключение .
Отметнато изключение
Проверено се наричат изключения време за компилиране изключения, защото тези изключения се проверяват по време на компилиране от компилатора. Компилаторът гарантира дали програмистът обработва изключението или не. Програмистът трябва да се справи с изключението; в противен случай системата е показала грешка при компилиране.
CheckedExceptionExample.java
import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } }
В горния код се опитваме да прочетем Здравей.txt файл и покажете неговите данни или съдържание на екрана. Програмата хвърля следните изключения:
- The FileInputStream(Име на файл на файл) конструкторът хвърля FileNotFoundException това е проверено изключение.
- The Прочети() метод на FileInputStream клас хвърля IOException .
- The близо() метод също хвърля IOException.
Изход:
Как да отстраня грешката?
Има основно два начина, чрез които можем да разрешим тези грешки.
1) Изключенията възникват в основния метод. Можем да се отървем от тези грешки при компилиране, като декларираме изключението в главния използван метод хвърлянията Ние декларираме само IOException, а не FileNotFoundException, поради връзката дете-родител. Класът IOException е родителският клас на FileNotFoundException, така че това изключение автоматично ще се покрие от IOException. Ще декларираме изключението по следния начин:
class Exception{ public static void main(String args[]) throws IOException { ... ... }
Ако компилираме и стартираме кода, грешките ще изчезнат и ще видим данните от файла.
2) Можем също да се справим с тези изключения, като използваме опитай да хванеш Но начинът, който използвахме по-горе, не е правилен. Трябва да дадем смислено съобщение за всеки тип изключение. Като направите това, ще бъде лесно да разберете грешката. Ще използваме блока try-catch по следния начин:
Изключение.java
import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } }
Ще видим правилно съобщение за грешка 'Файлът не е намерен!' на конзолата, защото на това място няма такъв файл.
Непроверени изключения
The без отметка изключенията са точно обратното на проверено изключения. Компилаторът няма да проверява тези изключения по време на компилиране. С прости думи, ако програма хвърли непроверено изключение и дори да не сме го обработили или декларирали, програмата няма да даде грешка при компилиране. Обикновено това се случва, когато потребителят предостави лоши данни по време на взаимодействие с програмата.
Забележка: Класът RuntimeException може да разреши всички непроверени изключения поради връзката дете-родител.
UncheckedExceptionExample1.java
class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } }
В горната програма сме разделили 35 на 0. Кодът ще бъде компилиран успешно, но ще изведе грешка ArithmeticException по време на изпълнение. При разделяне на число на 0 хвърля изключение за деление на нула, което е изключение за премахване на отметка.
Изход:
pd сливане
UncheckedException1.java
class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } }
Изход:
В горния код се опитваме да получим елемента, разположен на позиция 7, но дължината на масива е 6. Кодът се компилира успешно, но хвърля ArrayIndexOutOfBoundsException по време на изпълнение.
Дефинирано от потребителя изключение
в Java , вече имаме някои вградени класове за изключения като ArrayIndexOutOfBoundsException , NullPointerException , и ArithmeticException . Тези изключения са ограничени да се задействат при някои предварително дефинирани условия. В Java можем да напишем наш собствен клас изключения, като разширим класа Exception. Можем да хвърлим собствено изключение при определено условие, използвайки ключовата дума throw. За да създадем дефинирано от потребителя изключение, трябва да имаме основни познания за на опитай да хванеш блокирайте и хвърлям ключова дума .
Да напишем а Java програма и създайте дефинирано от потребителя изключение.
UserDefinedException.java
import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } }
Изход:
Описание:
В горния код създадохме два класа, т.е. UserDefinedException и NewException . The UserDefinedException има нашия основен метод и NewException клас е нашият дефиниран от потребителя клас изключения, който се разширява изключение . В NewException клас, създаваме променлива х от тип integer и му присвоете стойност в конструктора. След като присвоим стойност на тази променлива, връщаме съобщението за изключение.
В UserDefinedException клас, добавихме a опитай да хванеш блок. В раздела за опит хвърляме изключението, т.е. NewException и му предайте цяло число. Стойността ще бъде предадена на класа NewException и ще върне съобщение. Ние улавяме това съобщение в блока catch и го показваме на екрана.
Разлика между проверено и непроверено изключение
Да не | Отметнато изключение | Неотметнато изключение |
---|---|---|
1. | Тези изключения се проверяват по време на компилиране. Тези изключения се обработват и по време на компилиране. | Тези изключения са точно противоположни на проверените изключения. Тези изключения не се проверяват и обработват по време на компилиране. |
2. | Тези изключения са директни подкласове на изключение, но не са разширени от класа RuntimeException. | Те са директните подкласове на класа RuntimeException. |
3. | Кодът дава грешка при компилация в случай, че метод хвърля проверено изключение. Компилаторът не може сам да се справи с изключението. | Кодът се компилира без никакви грешки, тъй като изключенията избягват вниманието на компилатора. Тези изключения са резултат от грешки в програмната логика, създадени от потребителя. |
4. | Тези изключения възникват най-вече, когато вероятността от повреда е твърде висока. | Тези изключения възникват най-вече поради програмни грешки. |
5. | Често срещаните изключения включват IOException, DataAccessException, InterruptedException и др. | Често срещаните непроверени изключения включват ArithmeticException, InvalidClassException, NullPointerException и др. |
6. | Тези изключения се разпространяват с помощта на ключовата дума throws. | Те се разпространяват автоматично. |
7. | Изисква се да се предостави блокът try-catch и try-finally за обработка на провереното изключение. | В случай на непроверено изключение не е задължително. |
Бъгове или грешки, които не желаем и ограничават нормалното изпълнение на програмите, се наричат изключения .
ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions и т.н. са в категорията на Вградено изключение . Понякога вградените изключения не са достатъчни, за да обяснят или опишат определени ситуации. За да опишем тези ситуации, трябва да създадем наши собствени изключения, като създадем клас изключения като подклас на Изключение клас. Тези видове изключения идват в категорията на Дефинирано от потребителя изключение .