Обработка на изключения в Java
Какво е изключение в Java?
Изключение в Java е събитие, което прекъсва изпълнението на програмни инструкции и нарушава нормалния ход на изпълнение на програмата. Това е обект, който обвива информация за събитие за грешка, възникнала в рамките на метод, и се предава на системата за изпълнение. в Java, изключенията се използват главно за указване на различни видове състояния на грешка.
Има два вида грешки:
- Грешки във времето на компилиране
- Грешки по време на изпълнение
Грешките по време на компилиране могат отново да бъдат класифицирани отново в два типа:
- Синтактични грешки
- Семантични грешки
Пример за синтактични грешки:
Вместо да декларират int a;
погрешно сте го декларирали като in a;
за който компилаторът ще изведе грешка.
Пример: Вие сте декларирали променлива int a;
и след няколко реда код отново декларирате цяло число като int a;
. Всички тези грешки се подчертават, когато компилирате кода.
Пример за грешки по време на работа
Грешка по време на изпълнение се нарича an Изключения грешка. Това е всяко събитие, което прекъсва нормалния поток на изпълнение на програмата. Примери за изключения са аритметично изключение, изключение Nullpointer, изключение за деление на нула и т.н. Изключения в Java са нещо, което е извън контрола на разработчиците.
Кликнете тук ако видеото не е достъпно
Защо имаме нужда от изключение?
Да предположим, че сте кодирали програма за достъп до сървъра. Нещата работеха добре, докато разработвахте кода.
По време на действителното производство сървърът не работи. Когато вашата програма се опита да получи достъп до него, се повдига изключение.
Как да се справим с изключение
Досега видяхме, че изключението е извън контрола на разработчика. Но обвиняването на проблема с околната среда не е решение. Имате нужда от стабилно програмиране, което се грижи за изключителни ситуации. Такъв код е известен като Обработчик на изключения.
В нашия пример добра обработка на изключения би била, когато сървърът не работи, свържете се с резервния сървър.
За да приложите това, въведете кода си, за да се свържете със сървъра (използвайки традиционни условия if и else). Ще проверите дали сървърът не работи. Ако да, напишете кода за свързване към резервния сървър. Такава организация на кода, използваща цикъл „if“ и „else“, не е ефективна, когато вашият код има множество java изключения да се справя.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Опитайте Catch Block
Java осигурява вградено изключително управление.
- Нормалният код влиза в a Опитайте блок.
- Кодът за обработка на изключения отива в УЛОВ блок
В нашия пример блокът TRY ще съдържа кода за свързване към сървъра. Блокът CATCH ще съдържа кода за свързване към резервния сървър. В случай, че сървърът работи, кодът в блока CATCH ще бъде игнориран. В случай, че сървърът не работи, се създава изключение и кодът в catch блока ще бъде изпълнен.
Ето как се обработва изключението Java.
Синтаксис за използване на try & catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Пример
Стъпка 1) Копирайте следния код в редактор
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Стъпка 2) Запазете файла и компилирайте кода. Стартирайте програмата с командата java Javaизключение
Стъпка 3) Аритметично изключение – деление на нула е показано по-долу за ред # 5 и ред # 6 никога не се изпълнява
Стъпка 4) Сега нека видим как try and catch ще ни помогне да се справим с това изключение. Ще поставим изключението, причиняващо реда от код в a опитвам блок, последван от a улов блок. Копирайте следния код в редактора.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Стъпка 5) Запазете, компилирайте и стартирайте кода. Ще получите следния резултат
Както виждате, изключението се обработва и последният ред от код също се изпълнява. Също така имайте предвид, че ред #7 няма да бъде изпълнен, защото веднага щом се повдигне изключение, потокът от контроли скача към блока catch.
Забележка: Обектът AritmeticException „e“ носи информация за възникналото изключение, което може да бъде полезно при предприемане на действия за възстановяване.
Java Йерархия на клас изключение
След като се изпълни един оператор catch, останалите се заобикалят и изпълнението продължава след блока try/catch. Вложените catch блокове следват йерархията на изключенията.
- Всички класове по изключение в Java разширете класа 'Throwable'. Throwable има два подкласа, Error и Exception
- Класът Error дефинира изключението или проблемите, които не се очаква да възникнат при нормални обстоятелства от нашата програма, например грешка в паметта, хардуерна грешка, JVM грешка и т.н.
- Класът Exception представлява изключенията, които могат да бъдат обработени от нашата програма и нашата програма може да бъде възстановена от това изключение с помощта на блока try and catch
- Изключението по време на изпълнение е подклас на класа на изключение. Изключението от този тип представлява изключение, което възниква по време на изпълнение и което не може да бъде проследено по време на компилиране. Отличен пример за същото е изключение за деление на нула или изключение за нулев указател и т.н
- IO изключение се генерира по време на входни и изходни операции
- Прекъснати изключения в Java, се генерира по време на множество нишки.
Пример: За да разберете влагането на блокове try и catch
Стъпка 1) Копирайте следния код в редактор.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Стъпка 2) Запазете файла и компилирайте кода. Стартирайте програмата с командата, Ява Javaизключение.
Стъпка 3) Генерира се ArrayIndexOutOfBoundsException. Променете стойността на int d на 0. Запазете, компилирайте и стартирайте кода.
Стъпка ) Трябва да се генерира ArithmeticException.
Стъпка 5) Разкоментирайте ред #10 към ред #12. Запазете, компилирайте и стартирайте кода.
Стъпка 6) Грешка при компилиране? Това е така, защото Exception е основният клас на ArithmeticException Exception. Всяко изключение, което е повдигнато от ArithmeticException, може да бъде обработено и от клас Exception. Така блокът catch на ArithmeticException никога няма да получи шанс да бъде изпълнен, което го прави излишен. Оттук и грешката при компилирането.
Java Накрая Блок
Последният блок е се изпълнява независимо от повдигнатото изключение в блока за опити. Така е по избор за използване с блок за опит.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
В случай, че се повдигне изключение в блока try, блокът finally се изпълнява след изпълнението на блока catch.
Пример
Стъпка 1) Копирайте следния код в редактор.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Стъпка 2) Запазете, компилирайте и стартирайте кода.
Стъпка 3) Очакван резултат. Накрая блокът се изпълнява, въпреки че е повдигнато изключение.
Стъпка 4) Променете стойността на променлива d = 1. Запазете, компилирайте и стартирайте кода и наблюдавайте изхода. Долната част на формуляра
Oбобщение
- An Изключение е грешка по време на изпълнение което прекъсва нормалния поток на изпълнение на програмата. Прекъсването по време на изпълнението на програмата се нарича грешка или изключение.
- Грешките се класифицират в две категории
- Грешки по време на компилиране – Синтактични грешки, Семантични грешки
- Грешки по време на работа - изключение
- A стабилната програма трябва да обработва всички изключения и да продължи с нормалния си поток на изпълнение на програмата. Java осигурява вграден изключителен метод на работа
- Exception Handler е набор от кодове, които обработва изключение. Изключенията могат да бъдат обработени Java използвайки опитай и улови.
- Опитайте да блокирате: Нормалният код влиза в този блок.
- Блок за улавяне: Ако има грешка в нормалния код, тя ще влезе в този блок