java exceptions exception handling with examples
Овај видео водич о изузецима Јава објашњава све о руковању изузецима на Јави. Научићете о хијерархији изузетака, типовима, методама класа и још много тога:
Када извршавамо Јава програме, нормално понашање или нормалан ток програма се прекида због неких неочекиваних догађаја.
На пример, отварамо датотеку за читање података. Када се изврши позив Отворена датотека, налазимо да датотека коју покушавамо да отворимо недостаје. То резултира прекидом нормалног тока програма.
Овај догађај који утиче или прекида нормалан ток програма назива се „ Изузетак ”.
=> Посетите овде да бисте истражили серију Јава тренинга за све.
Ево видео упутства о руковању Јава изузецима:
Шта ћете научити:
Руковање изузецима у Јави
Када се у програму догоди изузетак, извршавање програма се прекида. Како се ради о наглом прекиду, систем генерише поруку и приказује је. Порука коју генерише систем може бити тајна попут неких кодова или нечитљива.
Стога би нормални корисник требало да разуме зашто је програм нагло зауставио његово извршавање, требало би да зна разлог. Поруке које генерише систем као резултат изузетка можда неће бити од помоћи. У Јави можемо да се позабавимо изузетком и пружимо значајне поруке кориснику о проблему.
Ово руковање изузетком, обично познато као 'Изузетак руковање' је једна од истакнутих карактеристика Јава програмирања.
Разлози за изузетак
Можемо имати различите разлоге због којих могу настати изузеци. Ако је то изузетак везан за унос, онда разлог може бити тај што су улазни подаци нетачни или нечитљиви.
Ако добијемо изузетак за И / О датотеке, онда је сасвим могуће да датотеке с којима имамо посла не постоје. У неко друго време могу се појавити грешке као што су мрежни проблеми, штампач није доступан или не функционише итд.
У програму, осим изузетака, добијамо и грешке. Стога, да бисмо се ефикасно носили са изузецима, морамо бити свесни разлика између грешке и изузетка.
Грешка указује на озбиљнији проблем са апликацијом и апликација не би требало да покушава да је ухвати. Супротно томе, изузетак је услов који ће свака разумна апликација покушати да ухвати.
Стога је грешка у апликацији озбиљнија и апликације би се срушиле када наиђу на грешку. С друге стране, изузеци се јављају у коду и програмер може да их реши пружањем корективних радњи.
Шта је руковање изузецима?
Руковање изузецима у Јави је механизам помоћу којег се одржава нормалан ток апликације. Да бисмо то урадили, користимо моћан механизам за руковање грешкама или изузецима током извођења у програму.
Редослед кода који се користи за руковање изузетком назива се „руковатељ изузетком“. Обрађивач изузетака испитује контекст у тренутку када се изузетак догодио. То значи да чита вредности променљивих које су биле у домету док се догодио изузетак, а затим враћа Јава програм да би наставио са нормалним протоком.
Предности руковања изузецима
Главна предност обраде изузетака је та што одржава нормалан проток апликације упркос појави изузетака. Када се догоди изузетак, програм се обично нагло завршава.
Поседовање обрађивача изузетака у програму неће довести до наглог прекида програма. Уместо тога, руковатељ изузецима осигурава да се сви изрази у програму извршавају нормално и да се ток програма нагло не прекида.
Хијерархија изузетака у Јави
Дијаграм испод приказује хијерархију изузетака у Јави. Класа јава.ланг.Тхровабле (потомак класе Објецт) је основна класа Јава Екцептион-а. Класе Екцептион и Еррор су изведене из ове класе.
Класа изузетака је основна класа за све остале изузетке.
Доље је дата хијерархија класе Екцептион у Јави која ће навести све главне изузетке којих Јава програмер треба бити свестан.
Изузетак класе у Јави
Као што се види на хијерархијском дијаграму, класа Тхровабле има две директне подкласе, тј. Екцептион и Еррор. Изузеци који потичу од спољног извора описани су у класи Екцептион.
Класа Екцептион декларише конструкторе као исте као Тхровабле класа и позивање сваког конструктора такође позива свој Тхровабле колегу. Класа изузетака не декларише своје методе, она наслеђује методе класе Тхровабле.
Конструктори и методе које класа Екцептион користи су представљени у наставку.
Конструктори
Градитељ Опис јавни изузетак () Подразумевани конструктор који конструише нови изузетак са поруком као нулл. јавни изузетак (ниска порука) Конструктор за конструисање новог изузетка са датом поруком. У овом случају узрок није иницијализован, а накнадни позив Тхровабле.инитЦаусе (јава.ланг.Тхровабле) може се користити за иницијализацију узрока. јавни изузетак (низ порука, узрок за бацање) Конструише нови изузетак користећи дату поруку и узрок. јавни изузетак (узрок за бацање) Конструише нови изузетак са датим узроком и поруком коју даје (узрок == нулл? Нулл: узрок.тоСтринг ()) (који обично садржи поруку класе и детаља узрока). заштићени изузетак (порука низа, узрок који се може бацити, логичка логика енаблеСуппрессион, логичка ознака вритаблеСтацкТраце) Конструише нови изузетак са датом поруком, узроком, сузбијањем (омогућено или онемогућено) и записом трага стека (омогућен или онемогућен).
Методе
Прототип методе | Опис |
---|---|
јавни Стринг гетМессаге () | Пошаљите детаљну поруку о изузећу који се догодио. |
публиц Тхровабле гетЦаусе () | Дознајте узрок изузетка представљеног објектом који се може бацити |
јавни Стринг тоСтринг () | Спаја име класе с резултатом гетМессаге () и враћа резултујући низ. |
публиц воид принтСтацкТраце () | Исписује резултат тоСтринг () и садржај праћења стека у излазни ток грешке, Систем.ерр. |
јавни СтацкТрацеЕлемент () гетСтацкТраце () | Добијте сваки елемент у трагу стека у облику низа. |
јавни Тхровабле филлИнСтацкТраце () | Напуните траг стека тренутним трагом стека. |
Пример изузетка
Даље, представљамо Јава програм да демонстрирамо основни пример изузетка. Овде пружамо променљиву низа иницијализовану на нулл вредност. Када покушамо да одштампамо ову променљиву, избацује се изузетак јер вредност Стринг не може бити нулл.
class Main { public static void main(String args()){ //declare a String variable and initialize it to null String myStr = null; //print the string System.out.println(myStr.length()); } }
Оутпут
Типови изузетака у Јави
Јава подржава три врсте изузетака:
- Означени изузетак
- Неозначени изузетак
- Грешка
У овом одељку ћемо размотрити све горе наведене три врсте.
# 1) Означени изузетак
Неки изузеци се проверавају у време компајлирања када се код компајлира. То су „Проверени изузеци“. Јава програм баца грешку компилације када утврди да је код унутар програма склон грешкама.
Можемо се побринути за грешке компилације које баца означени изузетак руковањем изузецима затварањем кода у блок три-цатцх или употребом кључне речи тхровс.
У хијерархији изузетака, класа која директно наслеђује класу Тхровабле, попут ИОЕкцептион, ЦлассНотФоундЕкцептион, итд., Су сви означени изузеци, осим класа РунтимеЕкцептион и Еррор. То су непроверени изузеци.
Следећи Јава програм приказује проверене изузетке, ФилеНотФоундЕкцептион и ИОЕкцептион. У овом програму покушавамо да отворимо непостојећу датотеку и читамо из ње.
Како датотека не постоји, метода отворене датотеке баца ФилеНотФоундЕкцептион. Даље, када покушамо да читамо садржај датотеке и затворимо датотеку, позиви метода бацају ИОЕкцептион.
import java.io.*; class Main { public static void main(String args()) { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Оутпут
формат тест случаја у тестирању софтвера
У горе наведеном излазу, пошто руковатељ изузецима одсутан, добијамо грешке компајлирања за проверене изузетке.
Сад ћемо дати клаузулу бацања за овај програм. Како је родитељ ФилеНотФоундЕкцептион ИОЕкцептион, ми ћемо само одредити ИОЕкцептион након клаузуле тхровс.
import java.io.*; class Main { public static void main(String args()) throws IOException { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Оутпут
Као што се види из резултата, када обрађујемо изузетак, он даје значајнији излаз уместо грешака у компилацији.
# 2) Непроверен изузетак
Непроверени изузеци су изузеци који се проверавају у току извођења. Стога ће упркос изузецима компилација програма бити успешна. Већина непроверених изузетака баца се због лоших података који се користе у програму.
Класе које наслеђују „РунтимеЕкцептион“ су непроверени изузеци. Изузеци попут АрраиИндекОутофБоундс Екцептион, АритхметицЕкцептион, НуллПОинтерЕкцептион итд. Су примери непроверених изузетака.
Следећи програм демонстрира изузетак током извођења који је настао дељењем броја са нулом.
class Main { public static void main(String args()) { int num1=10; int num2=0; //divide both numbers and print the result int result=num1/num2; System.out.println(result); } }
Оутпут
Видимо да се програм успешно компајлира, а затим се АритхметицЕкцептион баца током извођења.
Примери непровереног изузетка:
- АрраиИндекОутОфБоундсЕкцептион
- НуллПоинтерЕкцептион
- ИллегалАргументЕкцептион
- НумберФорматЕкцептион
Осим горе наведена два изузетка, постоји још неколико потврђених изузетака, укључујући:
- СКЛЕкцептион
- ИнвоцатионТаргетЕкецптион
# 3) Грешка
Грешка је обично неповратна и непоправљива ситуација у програму и када дође до грешке, програми се сруше. Неки од примера грешака у програму су ОутОфМемориЕррор, АссертионЕррор и ВиртуалМацхинеЕррор итд.
Класа грешке наслеђује се из класе Тхровабле. Грешка описује ситуацију која се не може решити и резултира падом програма.
Размотримо грешку ОутОфМемори у овом одељку као пример грешке.
Знамо да су сви објекти у Јави додељени помоћу новог оператора и ускладиштени на гомили. Када хрпи нестане меморије, Јава виртуелна машина (ЈВМ) не може доделити објекат. Истовремено, сакупљач смећа не може ослободити меморију. Ова ситуација доводи до грешке ОутОфМемори.
ОутОфМемориЕррор у Јави ће изгледати као што је приказано доле:
'exception in thread 'main' java.lang.outofmemoryerror: java heap space'
Присуство ОутОфМемориЕррор у програму значи да се обрађује превише података или се предуго задржавају објекти. Понекад то може бити и независна библиотека која троши меморију.
Узроци ОутОфМемориЕррор
# 1) Простор Јава Јава
Ако апликација има превише финализатора, скупљачи смећа објекте класе који имају методу Финализе не враћа одмах, већ се стављају у ред за финализацију касније. Понекад финализација не може пратити време и меморија хрпе се попуњава што резултира ОутОфМемориЕррор.
Други разлог за ОутОфМемориЕррор је тај што наведена величина гомиле може бити недовољна за апликацију.
Следећи код приказује ОутОфМемориЕррор који се може догодити због велике величине података декларисане за низ.
import java.util.*; public class Main { static List list = new ArrayList(); public static void main(String args()) throws Exception { Integer() array = new Integer(100000 * 100000); } }
Оутпут
# 2) Простор Пермген
Подручје трајне генерације у меморији такође може бити исцрпљено и могло би генерисати ОутОфМемори грешку.
Величина ПермГен региона одређује се током лансирања ЈВМ-а. Ако корисник не постави величину, тада се користи подразумевана величина која је специфична за платформу.
Иако су горња два обично главни узроци појаве ОутОфМемориЕррор, могу постојати и други узроци попут величине низа која премашује ограничење ВМ итд.
Листа изузетака у Јави
Доље је дата листа главних изузетака који се јављају на Јави. Дали смо примере програмирања за неке од ових изузетака. Имајте на уму да су ово уграђени изузеци које подржава Јава.
# 1) АритхметицЕкцептион: Аритметичке абнормалности попут дељења са нулом резултирају АритхметицЕкцептион.
Програм у наставку показује појаву АритхметицЕкцептион.
class Main { public static void main(String args()) { try { //define two numbers int num1 = 100, num2 = 0; int result = num1 / num2; // divide by zero //print the result System.out.println('Result = ' + result); } catch (ArithmeticException e) { System.out.println('ArithmeticException:Division by Zero'); } } }
Оутпут
подразумевани мрежни пролаз није доступан за Виндовс 10 вифи
# 2) АрраиИндекОутОфБоундсЕкцептион: АрраиИндекОутОфБоундсЕкцептион се баца када се елементу низа приступа помоћу недозвољеног индекса. Индекс који се користи премашује величину низа или је негативан.
# 3) ЦлассНотФоундЕкцептион: Ако дефиниција класе није пронађена, тада се подиже ЦлассНотФоундЕкцептион.
# 4) ФилеНотФоундЕкцептион: ФилеНотФоундЕкцептион се даје када датотека не постоји или се не отвори.
# 5) ИОЕкцептион: ИОЕкцептион се баца када операција улаз-излаз не успије или се прекине.
# 6) ИнтерруптедЕкцептион: Кад год нит ради обраду или спава или чека, тада се прекида бацањем ИнтерруптедЕкцептион.
# 7) НоСуцхФиелдЕкцептион: Ако класа не садржи наведено поље или променљиву, она баца НоСуцхФиелдЕкцептион.
# 8) НоСуцхМетходЕкцептион: Када метода којој се приступа није пронађена, тада се подиже НоСуцхМетходЕкцептион.
# 9) НуллПоинтерЕкцептион: НуллПоинтерЕкцептион се покреће када се упути на нулл објекат. Ово је најважнији и најчешћи изузетак у Јави.
# 10) НумберФорматЕкцептион: Овај изузетак је покренут када метода није могла претворити низ у нумерички формат.
# 11) РунтимеЕкцептион: Сваки изузетак који се догоди током извођења је РунтимеЕкцептион.
# 12) СтрингИндекОутОфБоундсЕкцептион: СтрингИндекОутОфБоундсЕкцептион баца класа Стринг и указује да индекс прелази величину објекта Стринг или је негативан.
# 13) ЕОФЕкцептион: ЕОФЕкцептион је део пакета јава.ио и баца се када се дође до краја датотеке и датотека се чита.
# 14) ИлегалАргументЕкцептион: ИллегалАргументЕкцептион се баца када се методи проследе нелегални или неваљани аргументи. На пример, погрешан формат података, нулл вредност када се захтева нон-нулл или су аргументи изван опсега.
Доле наведени Јава програм демонстрира ИллегалАргументЕкцептион.
public class Main { int m; public static void setMarks(int marks) public static void main(String() args) { setMarks(45); setMarks(101); } }
Оутпут
У горњем програму, ИллегалАргументЕкцептион се баца у другом позиву функције сетМаркс где уносимо ознаке које су изван домета (> 45).
# 15) ИнпутМисматцхЕкцептион: ИнпутМисматцхЕкцептион се баца када се очитани улаз не подудара са наведеним узорком. На пример, ако програм очекује цео број и чита флоат, тада се подиже ИнпутМисматцхЕкцептион.
# 16) НоСуцхЕлементЕкцептион: НоСуцхЕлементЕкцептион се баца када следећи елемент којем се приступа не постоји.
На пример, у Енумератион се метода нектЕлемент () користи за приступ следећем елементу у набрајању. Ако елемент не постоји, тада се баца НоСуцхЕлементЕкцептион. Углавном Јава колекције бацају овај изузетак.
Програм који је дат у наставку то показује.
import java.util.*; public class Main { public static void main(String() args) { Set hash_Set = new HashSet(); //create an empty hashSet. //This throws NoSuchElementException since hashSet is empty hash_Set.iterator().next(); } }
Оутпут
# 17) ЦонцуррентМодифицатионЕкцептион: ЦонцуррентМодифицатионЕкцептион обично бацају класе Цоллецтион. Овај изузетак се избацује када објекти истовремено покушавају да модификују ресурс.
На пример, нит не може да модификује колекцију када јој друга нит приступа. Ако дозволимо две нити, тада ће те две истовремено приступати колекцији и биће недоследности.
Следећи пример демонстрира ЦонцуррентМодифицатионЕкцептион.
import java.awt.List; import java.util.*; public class Main { public static void main(String() args) { ArrayList A_list = new ArrayList<>(); //add elements to the ArrayList A_list.add(10); A_list.add(20); A_list.add(30); Iterator it = A_list.iterator(); while (it.hasNext()) { Integer value = it.next(); System.out.println('ArrayList Value:' + value); if (value.equals(30)) A_list.remove(value); } } }
Оутпут
У горњем програму, док се АрраиЛист штампа, покушавамо истовремено да избришемо елемент. Ово је истовремени приступ и тиме се ствара изузетак.
Прилагођени изузеци у Јави
До сада смо разговарали о свим изузецима који су уграђени или обезбеђени у језику Јава. Осим ових изузетака, можемо дефинисати и сопствене изузетке. Они се називају прилагођени изузеци или кориснички дефинисани изузеци.
Користећи прилагођене изузетке, можемо дефинисати своје изузетке према нашим потребама.
Следећи пример приказује прилагођени изузетак који смо дефинисали за вредност целог броја.
//custom exception definition class InvalidValueException extends Exception{ InvalidValueException(String s){ super(s); } } class Main{ static void validate(int int_val)throws InvalidValueException{ if(int_val<10) //value is valid if> 10 else throw exception throw new InvalidValueException('Invalid value'); else System.out.println('This is valid integer'); } public static void main(String args()){ try{ validate(9); }catch(Exception m){System.out.println('Exception occured: '+m);} System.out.println('Code after Exception'); } }
Оутпут
б дрво вс б + дрво
Често постављана питања
П # 1) Шта подразумевате под изузећем?
Одговор: Догађај који се деси током извршавања програма и ремети нормалан ток извршења програма назива се Изузетак. Изузетак је нежељен и неочекиван и може се десити услед спољних фактора или грешака у програмирању.
П # 2) Која је разлика између грешке и изузетка?
Одговор: Изузетак су догађаји који ремете нормалан ток програма. Можемо се носити са изузецима у нашем програму и нормално наставити са програмом. Грешка је ненадокнадив догађај који се не може обрадити и прекида програм.
П # 3) Шта подразумевате под руковањем изузецима?
Одговор: Процес одређивања редоследа корака у програму за обраду изузетка назива се Обрада изузетака. Пружањем обрађивача изузетака у програму, можемо да обезбедимо нормалан ток програма.
П # 4) Које су предности руковања изузецима у Јави?
Одговор: Коришћењем руковања изузецима можемо одржавати нормалан ток извршења апликације. Такође можемо да ширимо грешке низом позива када пружамо обрађиваче изузетака.
К # 5) Каква је корист од руковања изузецима?
Одговор: Не завршавање нормалног тока извршавања апликације главна је употреба руковалаца изузецима у програму. Без руковалаца изузецима, програм ће се завршити и нормалан ток извршења ће се прекинути када се догоди изузетак.
Са изузетком којим се правилно рукује у програму, може да настави са нормалним извршавањем чак и када се догоди изузетак.
Још примера о изузецима
Изузетак је догађај који се догоди док је програм покренут и омета његово извршавање. Због чега ће софтверски производ нагло завршити.
Када се догоди овај изузетак, Јава креира објекат са поруком о грешци и информацијама о класи. Ово је изузетак.
Зашто нам је потребан изузетак у Јави?
Цласс ЕкцепДемо без изузетка:
public class ExcepDemo { public static void main(String() args) { int i=5; int j=0; System.out.println(i/j); System.out.println('statement after division'); } }
ИЗЛАЗ:
Класа ЕкцепДемо са руковањем изузетцима:
public class ExcepDemo { public static void main(String() args) { // TODO Auto-generated method stub int i=5; int j=0; try { System.out.println(i/j); } catch(ArithmeticException ae) { System.out.println('wrong input'); } System.out.println('statement after division'); } }
ИЗЛАЗ:
Покушајте, ухватите и коначно блокирајте:
- Изузетак рјешава блок три, цатцх.
- Изјаве које могу довести до изузетака написане су унутар блока три.
- Када се догоди изузетак, извршиће се изрази унутар блока цатцх. Ако се не догоди изузетак, блок цатцх се неће извршити.
- Без обзира на то што се изузетак догодио или се није догодио, завршни блок ће се извршити.
Врсте изузетака
Неозначени изузетак:
Како се непроверени изузеци могу избећи правилним програмирањем ( На пример. нулл поинтер Екцептион, Аритхметиц Екцептион) преводилац неће проверити. Непроверени изузетак ће се појавити током извођења.
Означени изузетак:
- Проверени изузетак ће проверити компајлер и његово обавезно бацање или руковање изузетком.
- Овај изузетак се користи за одвајање кода за руковање грешкама од редовног кода.
- Сви проверени изузеци су груписани и корисно је у разликовању проблема.
Пример: јава.ио
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class DemoExpChecked { public static void main(String() args) { try { File file=new File('input.txt'); BufferedReader br = new BufferedReader(new FileReader(file)) ; String content; while ((content=br.readLine())!=null) { System.out.println(content); } br.close(); } catch(IOException e) { e.printStackTrace(); } } }
Грешке
До грешке може доћи због програмских логичких грешака или било које меморије повезане са ЈВМ проблемом.
Пример: Грешка у меморији изван грешке или грешка при преливању стека.
Баци и баци
Кључна реч „баци“ користи се за бацање изузетка, док се кључна реч „баца“ користи за декларисање изузетка.
Пример бацања:
public class Demothrow { String content ; public void driving(String c) { this.content=c; if (content.isEmpty()) { throw new NullPointerException('content is empty'); } else { System.out.println('content=='+content); } } public static void main(String() args) { Demothrow dt=new Demothrow(); dt.driving(''); } }
Пример бацања:
Бацања се користе за давање информација да овај метод баца управо овај изузетак. Када позовете тај одређени метод, морате да се позабавите тим изузетком.
public class DemoThrows { int i=2,j=0; public void checkmethod () throws ArithmeticException{ System.out.println(i/j); } public static void main(String() args) { DemoThrows d =new DemoThrows(); try { d.checkmethod(); } catch (ArithmeticException ae) { ae.printStackTrace(); } } }
Кључне тачке које треба напоменути:
- Изузеци су абнормални догађаји који су се догодили током извршавања програма и то ће утицати на ток извршења.
- Грешка се разликује од изузетака. Пример грешака: Меморија из грешке.
- Проверени изузеци се проверавају током компајлирања и обавезно је поступати са тим провереним изузетком.
- Непроверени изузетак се јавља током извођења.
Закључак
Овај водич о руковању изузецима на Јави представио је дефиницију изузетака, руковање изузецима и хијерархију изузетака у Јави. Такође смо разговарали о класи изузетака у Јави која пружа разне конструкторе и методе за приступ изузецима.
Истражили смо листу уобичајених изузетака који се јављају на Јави и видели примере програмирања за главни изузетак. Такође смо разговарали о главним грешкама које се јављају у Јава програму заједно са врстама изузетака и прилагођеним изузецима.
=> Овде проверите СВЕ Јава туторијале.
Препоручено читање
- 10 најбољих изузетака селена и како поступати са њима (тачан код)
- Руковање изузецима ЈДБЦ - Како се рукује СКЛ изузецима
- Како се рукује изузетком у СоапУИ Гроови скриптама - Водич за СоапУИ бр. 11
- Јава Стринг са Стринг Буффер-ом и Стринг Буилдер Туториал
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Јава теме са методама и животним циклусом
- Јава виртуелна машина: како ЈВМ помаже у покретању Јава апликације
- Приступити модификаторима у Јави - Водич са примерима