Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ

Çfarë lloje përjashtimesh ekzistojnë në java. Llojet e përjashtimit në Java

Ky artikull diskuton mekanizmin e trajtimit të përjashtimeve të përdorura në Java. Një përjashtim në Java është një objekt që përshkruan një gjendje të jashtëzakonshme që ka ndodhur në një pjesë të kodit të programit. Kur ndodh një përjashtim, krijohet një objekt i klasës Përjashtim. Ky objekt i kalohet metodës që trajton këtë lloj përjashtimi. Mund të bëhen gjithashtu përjashtime për të raportuar disa situata jonormale.

Fjalë kyçe përjashtim provo, kap, hedh, hedh, më në fund

Mekanizmi i përjashtimit në Java mbështetet nga pesë fjalë kyçe:

  • kap,
  • hedh,
  • hedh,
  • më në fund.

Më poshtë është forma e përgjithshme e bllokut të trajtimit të përjashtimeve.

Provoni ( // bllok kodi ) kapni ( f) ( // mbajtës përjashtimi i tipit ExceptionType1 ) kap ( f) ( // mbajtës përjashtimi i tipit ExceptionType2 ) më në fund ( // ...)

Llojet e përjashtimit

Në krye të hierarkisë së përjashtimit është klasa E hedhshme, e cila është e trashëguar nga Objekt. Secili nga llojet e përjashtimeve është një nënklasë e Throwable. Dy pasardhësit e drejtpërdrejtë të klasës Throwable ndajnë hierarkinë e nënklasës së përjashtimit në dy degë të dallueshme. Hierarkia e klasës është paraqitur në figurë.

Klasa Përjashtim përdoret për të përshkruar përjashtimet që duhet të kapen nga kodi i përdoruesit. Klasa gabim ka për qëllim të përshkruaj situata të jashtëzakonshme që, në kushte normale, nuk duhet të përfshihen në programin e përdoruesit.

Përjashtimet e pakapura

Objektet e përjashtimit krijohen automatikisht nga koha e ekzekutimit në Java si rezultat i disa përjashtimeve që ndodhin. Një shembull i një programi në të cilin krijojmë një përjashtim kur pjesëtojmë me zero.

mostrat e paketimit; klasa TestException ( kryesore publike statike e zbrazët (args me varg) ( int d = 0; int a = 42 / d; System.out.println ("a = " + a); ) )

Mesazhi i mëposhtëm do të printohet në tastierë.

Përjashtim në thread "main" java.lang.ArithmeticException: / me zero në mostrat.TestException.main(TestException.java:8)

Vini re se lloji i përjashtimit të hedhur nuk ishte Përjashtim dhe jo E hedhshme. Kjo është një nënklasë e klasës Përjashtim, domethënë: Përjashtim aritmetik Një që shpjegon se çfarë gabimi ka ndodhur gjatë ekzekutimit të programit.

Le të ndryshojmë klasën duke shtuar një metodë statike nënprogram, në të cilën do të krijojmë të njëjtën situatë të jashtëzakonshme.

mostrat e paketimit; klasa publike TestException ( nënprogramë statike e zbrazët () ( int d = 0; int a = 10 / d; System.out. println ("a = " + a); ) kryesore e zbrazët statike publike (args vargje) ( TestException. nënrutinë ( );))

Mesazhi i ekzekutimit të programit tregon se si mbajtësi i përjashtimeve të kohës së ekzekutimit të Java nxjerr përmbajtjen e të gjithë grupit të thirrjeve.

Përjashtim në thread "kryesore" java.lang.ArithmeticException: / me zero në mostrat.TestException.nënrutinë(TestException.java:8) në mostrat.TestException.main(TestException.java:14)

Përjashtimet e kapjes së përpjekjeve/kapjes

Për të mbrojtur kodin e programit nga përjashtimet, duhet të përdorni blloqe të lidhura me fjalë kyçe provoni të kapni; kapja vendoset menjëherë pas bllokut të provoni. Blloku i kapjes specifikon llojin e përjashtimit që do të trajtohet.

Klasa TestException ( publike statike e zbrazët kryesore (string args) (provoni ( int d = 0; int a = 42 / d; ) catch (ArithmeticException e) ( System.out.println ("pjestimi me zero"); ) ) )

Qëllimi i më të mirë-projektuar kap-seksionet duhet të përpunojnë përjashtimin që ka lindur dhe t'i sjellin variablat e programit në një gjendje të arsyeshme - në mënyrë që programi të mund të vazhdojë sikur të mos kishte asnjë gabim (në shembullin tonë shfaqet një paralajmërim - pjesëtimi me zero).

Seksione të shumta kapëse

Në disa raste, një bllok kodi mund të bëjë përjashtime të llojeve të ndryshme. Për të lokalizuar trajtimin e situatave të tilla, mund të përdorni disa kap-seksione për një provoni bllokimin. Blloqet e klasave më të specializuara të përjashtimit duhet të vijnë së pari, pasi asnjë nënklasë nuk do të arrihet nëse vendoset pas superklasës.

Shembulli i mëposhtëm kap dy lloje të ndryshme përjashtimesh, me dy trajtuesit e specializuar të ndjekur nga një seksion kap qëllimi i përgjithshëm, duke interceptuar të gjitha nënklasat e një klase E hedhshme.

Klasa MultiCatch ( static int c = ( 1 ); publik statik void main (String args) (provo ( int a = args.length; System.out.println ("a = " + String.valueOf(a)); int b = 23 / a; c = 33; ) kap (ArithmeticException e) ( System.out.println("ArithmeticException: " + e.getMessage()); ) catch(ArrayIndexOutOfBoundsException e) ( System.out.println("ArrayIndexExOut " + e.getMessage()); ) ))

Ky shembull, i ekzekutuar pa parametra, hedh një përjashtim ndarje me zero. Nëse një ose më shumë parametra specifikohen në vijën e komandës, duke vendosur "a" në një vlerë më të madhe se zero, atëherë do të ngrihet një përjashtim jashtë kufijve. ArrayIndexOutOfBounds. Më poshtë janë rezultatet e këtij programi që funksionon në të dyja mënyrat.

A = 0 div nga 0: java.lang.ArithmeticException: / me zero a = 1 indeks grupi oob: java.lang.ArrayIndexOutOfBoundsException:33

Deklarata të mbivendosura të provës

Operatorët provoni ju mund të investoni në njëri-tjetrin. Nëse operatori provoni niveli i ulët pa seksion kap që korrespondon me përjashtimin e hedhur, pirgu do të zgjerohet një shkallë më lart dhe seksionet e kapjes së deklaratës së përpjekjes së jashtme do të kontrollohen për një mbajtës të përshtatshëm. Një shembull i futjes së dy deklaratave provoni të kapni në njëri-tjetrin duke thirrur një metodë.

Klasa MultiNest ( static int c = ( 1 ); static void checkArray() (provo (c = 33; ) catch(ArrayIndexOutOfBoundsException e) ( System.out.println "ArrayIndexOutOfBoundsException: " + e.getMessage());) static void main(string args) (provo ( int a = args.length(); System.out.println("a = " + a); int b = 23 / a; checkArray(); ) catch (Arithmetic Exception e) ( System.out.println ("Arithmetic Exception: " + e.getMessage()); ) )

Hidhni përjashtime

Një program mund të bëjë në mënyrë eksplicite një përjashtim duke përdorur deklaratën hedhin. Pas ekzekutimit të deklaratës hedhin ekzekutimi i programit pezullohet dhe deklaratat pasuese nuk ekzekutohen. JVM shikon blloqet më të afërta provoni ... kap, që korrespondon me llojin e përjashtimit, për "transferimin e kontrollit". Nëse nuk gjendet asnjë bllok i përshtatshëm, mbajtësi i përjashtimit do të ndalojë programin dhe do të "printojë" gjendjen e grupit të thirrjeve.

Shembull i një përjashtimi ku fillimisht krijohet objekti i përjashtimit, pastaj deklarata hedhin ngre një përjashtim, pas së cilës i njëjti përjashtim ngrihet përsëri - këtë herë nga kodi i seksionit që e kapi herën e parë kap.

Klasa TestThrow ( metoda statike e zbrazëtisë () ( provo ( hedh një zbrazëti të re NullPointerException ("Përjashtim në metodë"); ) kap (NullPointerException e) ( System.out.println(e.getMessage()); hedh e; ) ) boshllëk statik publik main(String args) (provo (metoda(); ) catch(NullPointerException e) ( System.out.println("Catch brenda main: " + e.getMessage()); ) ) )

Rezultati i ekzekutimit të programit është paraqitur më poshtë.

Përjashtim në metodë Catch inside main: Përjashtim në metodë

hedh deklaratën e përjashtimit

Nëse një metodë mund të hedhë përjashtime që nuk i trajton, atëherë duhet ta deklarojë atë në mënyrë që metodat e tjera që e thërrasin të mund të mbrohen nga ato përjashtime. Për të specifikuar një listë përjashtimesh që mund të hidhen nga një metodë, përdorni fjalën kyçe hedh.

Nëse metoda është eksplicite (d.m.th. duke përdorur operatorin hedhin) hedh një përjashtim, lloji i klasës së përjashtimit duhet të specifikohet në deklaratë hedh në deklaratën e kësaj metode. Duke pasur parasysh këtë, sintaksa e përkufizimit të një metode duhet të përshkruhet si më poshtë:

Klasa publike TestThrow ( metoda statike e zbrazët () hedh IllegalAccessException ( provo ( System.out.println ("metoda e brendshme"); hedh i ri IllegalAccessException ("Përjashtim në metodë"); ) kapur (NullPointerException e) ( System.out.println( e.getMessage()); ) ) publik statik void main(String args) (provo (metoda(); ) catch(IllegalAccessException e) ( System.out.println("Catch brenda main: " + e.getMessage()) ;)))

Rezultati i shembullit:

Catch inside main: Përjashtim në metodë

në fund fjalë kyçe

Në rastin kur është e nevojshme të garantoni ekzekutimin e një seksioni të caktuar të kodit, duhet të përdorni fjalën kyçe më në fund. Përdorimi i komunikimit provoni...më në fund ju lejon të siguroheni që kodi të ekzekutohet pavarësisht se cilat përjashtime janë hedhur dhe kapur, edhe në rastet kur metoda nuk ka një seksion kapje që korrespondon me përjashtimin e hedhur.

Çdo seksion provoni duhet të ketë të paktën ose një seksion kap ose bllokoj më në fund. Blloku i fundit është shumë i dobishëm për mbylljen e skedarëve dhe lëshimin e çdo burimi tjetër që mbahet përkohësisht në fillim të ekzekutimit të një metode.

Më poshtë është një shembull i një klase me dy metoda që përfundojnë për arsye të ndryshme, por të dyja ekzekutojnë kodin e seksionit përpara se të dalin më në fund.

Klasa publike TestFinally ( static void methodA() (provo ( System.out.println ("inside methodA"); hidhni RuntimeException të ri ("Exception in methodA"); ) në fund ( System.out.println ("në fund brenda metodësA") ; ) ) static void methodB() (provo ( System.out.println ("inside methodB"); return; ) më në fund ( System.out.println ("më në fund brenda metodësB"); ) ) public static void main (String args ) ( provo ( metodaA(); ) catch (Përjashtim e) ( System.out.println ("Catch përjashtim në brendësi të kryesore"); ) metodaB(); ) )

Në rastin e testimit, bëhet një përjashtim në metodën A. Por para daljes së parakohshme nga blloku provoni, ekzekutohet seksioni më në fund. Metoda e dytë MetodaB përfundon punën në provoni- operatori i bllokimit kthimi, por në të njëjtën kohë, para daljes nga metoda, ekzekutohet kodi i programit të bllokut më në fund. Rezultati i testit:

Metoda e brendshmeA përfundimisht brenda metodësA Kapja e përjashtimit brenda metodës kryesore brenda metodësB përfundimisht brenda metodësB

Trajtimi i përjashtimeve në Java ofron një mekanizëm jashtëzakonisht të fuqishëm për menaxhimin e programeve komplekse. Fjalë kyçe provoni, hidhni, kapni ju lejon të trajtoni gabimet dhe situatat e ndryshme jonormale në program.

Me përjashtim të trashëgimisë

kap- ndërtimi polimorfik, d.m.th. catch on type prind kap përjashtime të çdo lloji që është Parent.

Klasa publike TestException ( public static void main (String args) ( provo ( System.err.print ("niveli 0"); hedh RuntimeException të ri (); System.err.print ("niveli 1"); ) kapur (Përjashtim e ) ( // catch Exception CATCH RuntimeException System.err.print("niveli 2"); ) System.err.println("niveli 3"); ) )

Si rezultat, në tastierë do të shohim

Niveli 0 niveli 2 niveli 3

gabim dhe Përjashtim nga degët e trashëgimisë paralele nga E hedhshme, kështu që kapja e një "vëllai" nuk mund të kap një "vëlla" tjetër.

Klasa publike TestError (publike statike void main (String args) (provo ( System.err.println ("niveli 0"); nëse (e vërtetë) (hedh një gabim të ri(); ) System.err.println ("niveli 1 ") ; ) catch (Përjashtim e) ( System.err.println ("niveli 2"); ) System.err.println ("niveli 3"); ) )

Rezultati i ekzekutimit të programit

Niveli 0 Përjashtim në thread "main" java.lang.Gabim në TestError.main(TestFinally.java:8)

Përjashtime të shumta

Deklarimi i përjashtimeve në një metodë mund të jetë i shumëfishtë. Shembull:

Importo java.io.EOFException; importoni java.io.FileNotFoundException; klasa publike MultiException ( // deklaro përjashtime public static void main(String args) hedh EOFException, FileNotFoundException ( if (System. currentTimeMillis() % 2 == 0) ( hedh EOFException i ri(); ) other ( hedh i ri FileNotFoundException(); ) ))

Një nga kërkesat standarde të TOR për zhvillimin e softuerit është mungesa e gabimeve dhe konflikteve që pengojnë funksionimin normal. Ekzistojnë dy mënyra për ta zbatuar atë - për të kufizuar funksionalitetin dhe aftësitë e përdoruesit, ose për të krijuar kodin që do të marrë parasysh problemet e mundshme.

Në Java, një përjashtim është çdo gabim që ndodh gjatë ekzekutimit të një programi. Kjo mund të jetë një mospërputhje e llojit të të dhënave, ndarje me zero, shkëputje nga serveri dhe shumë më tepër. Operacionet për gjetjen dhe parandalimin e tyre quhen trajtimi i përjashtimeve.

Hierarkia

Përpara se të kalojmë në praktikë, le të njihemi me llojet e përjashtimeve të Java dhe hierarkinë e tyre. Në zemër të gjithçkaje është klasa Throwable. Të gjitha konfliktet e mundshme të kodit me makinën dhe përdoruesin përshkruhen këtu. Për lehtësinë e përpunimit dhe leximit, klasa Throwable ka nënklasa Error dhe Exception. Gabim - gabime kritike që nuk ndodhin domosdoshmërisht për fajin e përdoruesit, ato nuk mund të përpunohen. Përjashtim - konfliktet aktuale të programit tonë që duhen kapur.

Hidhini një sy diagramit të thjeshtuar të hierarkisë së përjashtimit të Java:

Siç mund ta shihni, blloqet ndahen në "dy kampe" sipas ngjyrave - përjashtime java të kontrolluara dhe të pakontrolluara. Ky klasifikim tregon se si përpiluesi i percepton ato: të kontrolluara - merr parasysh, të pakontrolluara - injoron. I pari përfshin Exception në tërësinë e tij, me përjashtim të RuntimeException. Të gjitha klasat e tjera të përjashtimit nuk janë të kontrolluara nga përpiluesi.

Hierarkia e klasës së përjashtimit është gjithashtu e rëndësishme për organizimin e duhur të kodit. Le të themi se keni shumë njësi përpunimi. Pastaj në fillim është e nevojshme të tregohen nivelet më të ulëta, dhe në fund - më të lartat. Përndryshe, vetëm blloku i parë do të funksionojë, dhe pjesa tjetër do të shpërfillet.

Krijimi i një mbajtësi

Deklaratat e mëposhtme përdoren për të trajtuar përjashtimet nga java: provo, kap, më në fund, hedh, hedh. Tre të parat janë struktura standarde e bllokut tuaj. Hap pas hapi:

  1. Deklarata ose pjesa e kodit ku duhet të gjeni gabimin vendoset në një bllok prove.
  2. Më pas, në bllokun e kapjes, ju specifikoni se çfarë lloj përjashtimi duhet të kapni dhe si ta trajtoni atë.
  3. Në bllokun e fundit, një grup veprimesh të kërkuara kur ndodh një gabim. Zakonisht, ky është shkrimi i të dhënave, mbyllja e burimeve, etj. Blloku ekzekutohet gjithmonë, pavarësisht nga shkaktari i kapjes.

Konsideroni strukturën në shembullin e një përjashtimi Java:

provoni (

}
kap (përveç_llojit_objekt_përjashtim) (
// kodi i përpunimit
}
me ne fund (

}

Nëse dëshironi të trajtoni përjashtime të shumta, thjesht krijoni një bllok tjetër kapjeje.

provoni (
// kodi ku duam të gjurmojmë gabimin
}
catch (exception_type_1 exclusive_object1) (
// kodi i përpunimit
}
kap (përveç_lloj_2 përjashtim_objekt2) (
// kodi i përpunimit
}
me ne fund (
// çfarë duhet bërë pas përfundimit të bllokut të provoni
}

Me deklaratën e hedhjes, mund të bëni përjashtime:

hedh instance_Throwable

Në praktikë, duket kështu:

student stud1;

if(stud1 == null)(

}
}

Le të përfshijmë një deklaratë hedhjeje në shembullin tonë standard të provo-catch:

publik void onClick (Shiko pamjen) (
nëse (stud1 == null) (
provoni (
hedh NullPointerException të ri ("Studenti nuk ekziston");
) kap (NullPointerException e) (
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}

Sapo përpunimi të arrijë deklaratën e hedhjes, ekzekutimi i mëtejshëm i kodit do të ndërpritet. Trajtuesi do të marrë në konsideratë bllokun më të afërt të try-catch për përjashtimin e kërkuar, pastaj atë tjetër, dhe kështu me radhë deri në fund të kodit. Nëse nuk ka asnjë mënyrë për të shkaktuar një përjashtim nga kudo, mbajtësi do të ndalojë programin.

Deklarata hedh përdoret për metoda që përmbajnë përjashtime, por nuk trajtohen.

lloji emri_metodi(lista_param) hedh listën_ekziston (
// kodi i metodës
}

Disa përjashtime në listë duhet të renditen të ndara me presje. Duke përdorur këtë konstrukt, ju u tregoni të gjitha metodave të thirrjes që të trajtojnë përjashtimet.

Deklaratat try mund të futen brenda njëri-tjetrit. Për më tepër, nëse mbajtësi i mbivendosur nuk ka bllokun e tij të kapjes, ai e kërkon atë në deklaratën prind. Nëse nuk është as aty, blloku përpunohet nga sistemi.

Përjashtime të gatshme dhe të reja

  • Përjashtim Arithmetic - gabime në llogaritje.
  • NullPointerException - Një referencë për një hapësirë ​​boshe.
  • NegativeArraySizeException - një grup dimensionesh negative.
  • ArrayStoreException - Lloji i gabuar i caktuar për elementin e grupit.
  • NumberFormatException - Nuk mund të konvertohet vargu në numër.
  • IllegalArgumentException - Argument i pavlefshëm në thirrjen e metodës.
  • UnsupportedOperationException - Operacioni i specifikuar nuk ekziston.
  • TypeNotPresentException - Lloji i specifikuar nuk ekziston.

Të gjitha llojet e specifikuara të përjashtimeve java përmbahen në klasën RuntimeException, që do të thotë se ato nuk kanë nevojë të specifikohen në bllokun e hedhjeve.

Natyrisht, sistemi nuk mund të përmbajë të gjitha llojet e përjashtimeve. Disa do të duhet të krijohen vetë. Për të krijuar përjashtimin tuaj java, ju duhet të trashëgoni klasën tuaj nga Exception dhe të anashkaloni metodat e kërkuara të klasës Throwable. Ose të trashëgohet nga lloji më i afërt në kuptim. Konsideroni shembullin e një programi për android që krijon një përjashtim java:

paketë geekbrains.përjashtim;

Importo android.os.Bundle;
importoni android.support.v7.app.AppCompatActivity;
importoni android.view.View;

Klasa publike MainActivity zgjeron AppCompatActivity(

@Override
i mbrojtur void onCreate(Bundle savedInstanceState) (
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

publik void testMethod() hedh StudentException(
System.out.println("Hedhja e StudentException nga testMethod()");
hedhin StudentException (); // konstruktori i paracaktuar
}

testi publik i zbrazëtMethod2() hedh StudentException(
System.out.println("Hedhja e StudentException nga testMethod2()");
hedh StudentException i ri ("Krijuar në metodën e dytë");
}

Publik void onClick (Shiko pamjen) (
provoni (
Metoda e testimit();

e.printStackTrace();
System.out.println ("Përjashtimi u kap");
}

provoni (
testMetod2();
) kap (StudentException e) (
e.printStackTrace();
}
}

Klasa StudentException zgjat përjashtimin(
Student Përjashtim() (
}

StudentException(Starg msg) (
super(msg);
}
}
}

Trajtimi i përjashtimeve është themeli i kodit të sigurt dhe cilësor. Me ndihmën e tyre, ju mund të kontrolloni veprimet e përdoruesit, rrjedhën e programit ose të shtoni variancë në kod.

Përditësimi i fundit: 30.10.2015

Shpesh, gabimet mund të ndodhin gjatë ekzekutimit të një programi, dhe jo domosdoshmërisht për fajin e zhvilluesit. Disa prej tyre janë të vështira për t'u parashikuar ose parashikuar, dhe ndonjëherë edhe të pamundura. Kështu, për shembull, lidhja e rrjetit mund të prishet papritmas kur transferoni një skedar. Situata të tilla quhen përjashtime.

Gjuha Java ofron lehtësira të veçanta për trajtimin e situatave të tilla. Një objekt i tillë është provoni ... kapni ... përfundimisht ndërtoni. Kur ndodh një përjashtim në bllokun try, kontrolli kalon në bllokun e kapjes, i cili mund të trajtojë përjashtimin e dhënë. Nëse nuk gjendet një bllok i tillë, përdoruesi i shfaqet një mesazh përjashtimi të patrajtuar dhe ekzekutimi i mëtejshëm i programit ndalet. Dhe në mënyrë që një ndalesë e tillë të mos ndodhë, duhet të përdorni bllokun try..catch. Për shembull:

numrat int = int i ri; numrat=45; System.out.println(numrat);

Meqenëse grupi ynë i numrave mund të përmbajë vetëm 3 elementë, kur të ekzekutohet instruksioni numrat=45, konsola do të shfaqë një përjashtim dhe programi do të përfundojë. Tani le të përpiqemi të trajtojmë këtë përjashtim:

Provoni( numrat int = int i ri; numrat=45; System.out.println(numrat); ) catch(Exception ex)( ex.printStackTrace(); ) System.out.println("Programi përfundoi");

Kur përdorni një bllok try...catch, të gjitha deklaratat midis deklaratave try dhe catch ekzekutohen së pari. Nëse ndodh një përjashtim në bllokun e "provës", atëherë urdhri i ekzekutimit normal ndalon dhe vazhdon në deklaratën "catch". Prandaj, kur ekzekutimi i programit arrin numrat e rreshtit=45; , programi do të ndalet dhe do të shkojë në bllokun e kapjes

Shprehja catch ka sintaksën e mëposhtme: catch (exception_type_ variable_name) . Në këtë rast deklarohet ndryshorja ex, e cila është e tipit Exception. Por nëse përjashtimi i hedhur nuk është i llojit të specifikuar në deklaratën e kapjes, atëherë ai nuk trajtohet dhe programi thjesht varet ose hedh një mesazh gabimi.

Por meqenëse lloji Exception është klasa bazë për të gjitha përjashtimet, deklarata catch(Exception ex) do të trajtojë pothuajse të gjitha përjashtimet. Trajtimi i përjashtimit në këtë rast zbret në printimin e grumbullit të gjurmës së gabimit në tastierë duke përdorur metodën printStackTrace() të përcaktuar në klasën Exception.

Pasi të përfundojë blloku i kapjes, programi vazhdon punën e tij, duke ekzekutuar të gjitha udhëzimet e tjera pas bllokut të kapjes.

Konstrukti try..catch mund të ketë gjithashtu një bllok përfundimisht. Megjithatë, ky bllok është opsional dhe mund të hiqet nga trajtimi i përjashtimeve. Blloku i fundit ekzekutohet pavarësisht nëse është hedhur një përjashtim në bllokun e provoni apo jo:

Provoni( numrat int = int i ri; numrat=45; System.out.println(numrat); ) catch(Exception ex)( ex.printStackTrace(); ) më në fund( System.out.println("Blloko përfundimisht"); ) System.out.println ("Programi përfundoi");

Trajtimi i përjashtimeve të shumta

Ka shumë lloje të ndryshme përjashtimesh në Java, dhe ne mund të kufizojmë trajtimin e tyre duke përfshirë blloqe shtesë të kapjes:

numrat int = int i ri; try(numrat=45; numrat=Integer.parseInt("gfd"); ) catch(ArrayIndexOutOfBoundsException ex)( System.out.println("Array jashtë kufijve"); ) catch(NumberFormatException ex)( System.out.println ("Gabim gjatë konvertimit nga vargu në numër");

Nëse kemi një përjashtim të një lloji të caktuar, atëherë ai shkon në bllokun përkatës të kapjes.

hedh deklaratë

Ju mund të përdorni deklaratën hedh për të raportuar se një përjashtim ka ndodhur në programin tuaj. Kjo do të thotë, me ndihmën e këtij operatori, ne vetë mund të krijojmë një përjashtim dhe ta ngremë atë gjatë ekzekutimit. Për shembull, në programin tonë, një numër është duke u futur dhe ne duam që të hidhet një përjashtim nëse numri është më i madh se 30:

paketa e parë app; import java.util.Scanner; klasa publike FirstApp ( kryesore publike statike e zbrazët (string args) ( provo ( Skaneri në = Skaneri i ri (System.in); int x = in.nextInt (); if (x>=30) ( hedh një përjashtim të ri ("Numri x duhet të jetë më pak se 30"); ) ) catch(Exception ex)( System.out.println(ex.getMessage()); ) System.out.println("Programi u mbyll"); ) )

Këtu, për të krijuar një objekt përjashtimi, përdoret konstruktori i klasës Exception, në të cilin transmetohet mesazhi i përjashtimit. Dhe nëse numri x është më i madh se 29, atëherë do të bëhet një përjashtim dhe kontrolli do të kalojë në bllokun e kapjes.

Në bllokun e kapjes, ne mund të marrim mesazhin e përjashtimit duke përdorur metodën getMessage().

Hej Habr! Unë paraqes në vëmendjen tuaj përkthimin e artikullit Fiksimi i 7 gabimeve të zakonshme të trajtimit të përjashtimeve në Java nga Thorben Janssen.

Trajtimi i një përjashtimi është një nga detyrat më të zakonshme, por jo domosdoshmërisht një nga detyrat më të lehta. Kjo është ende një nga temat e diskutuara shpesh në ekipet me përvojë, dhe ka disa praktika më të mira dhe gracka të zakonshme për të cilat duhet të keni parasysh.

Këtu janë disa gjëra që duhen shmangur kur trajtoni përjashtimet në aplikacionin tuaj.

Gabimi 1: Deklarimi java.lang.Exception ose java.lang.Throwable

Siç e dini tashmë, ju duhet ose të deklaroni ose të trajtoni një përjashtim të kontrolluar. Por përjashtimet e kontrolluara nuk janë të vetmet që mund të specifikoni. Ju mund të përdorni çdo nënklasë të java.lang.Throwable në klauzolën e hedhjeve. Kështu, në vend që të specifikoni dy përjashtime të ndryshme që hedh pjesa e mëposhtme e kodit, thjesht mund të përdorni java.lang.Exception në klauzolën e hedhjeve.

boshllëku publik doNotSpecifyException() hedh Exception (doSomething(); ) void publik doSomething() hedh NumberFormatException, IllegalArgumentException ( // bëj diçka )
Por kjo nuk do të thotë që ju duhet. Specifikimi i Exeption ose Throwable e bën pothuajse të pamundur trajtimin e tyre në mënyrë korrekte kur thirret metoda juaj. I vetmi informacion që merr telefonuesi juaj është se diçka mund të shkojë keq. Por ju nuk ndani asnjë informacion për ndonjë ngjarje të jashtëzakonshme që mund të ndodhë. Ju e fshehni këtë informacion pas arsyeve të përgjithësuara për përjashtimet. Përkeqësohet edhe më shumë kur aplikacioni juaj ndryshon me kalimin e kohës. Hedhja e përjashtimeve gjenerike fsheh të gjitha ndryshimet e përjashtimeve që telefonuesi duhet të presë dhe të trajtojë. Kjo mund të çojë në disa gabime të papritura që duhet të gjenden në rastin e testit në vend të një gabimi përpilues.

Përdorni klasa konkrete

Është shumë më mirë të specifikoni klasat më specifike të përjashtimit, edhe nëse duhet të përdorni disa prej tyre. Kjo i tregon telefonuesit se cilat ngjarje përjashtimore duhet të trajtojë. Gjithashtu ju lejon të përditësoni klauzolën e hedhjes kur metoda juaj hedh një përjashtim shtesë. Në këtë mënyrë klientët tuaj janë të vetëdijshëm për ndryshimet dhe madje marrin një gabim nëse ndryshoni përjashtimet që janë hedhur. Një përjashtim i tillë është shumë më i lehtë për t'u gjetur dhe trajtuar sesa një përjashtim që ndodh vetëm kur ekzekutohet një rast i veçantë testimi.

Void publik specifySpecificExceptions() hedh NumberFormatException, IllegalArgumentException (doSomething();

Gabimi 2: Kapja e përjashtimeve të përgjithshme

Ashpërsia e këtij gabimi varet nga komponenti i softuerit që po zbatoni dhe ku po kapni përjashtimin. Mund të jetë mirë të kapni java.lang.Përjashtim në metodën kryesore të aplikacionit tuaj Java SE. Por ju duhet të preferoni të kapni disa përjashtime nëse po zbatoni një bibliotekë ose po punoni në shtresa më të thella të aplikacionit tuaj.

Kjo siguron disa përfitime. Kjo qasje lejon që çdo klasë përjashtimi të trajtohet ndryshe dhe ju pengon të kapni përjashtime që nuk i prisnit.

Por kini parasysh se blloku i parë i kapjes që trajton klasën e përjashtimit ose një nga superklasat e tij do ta kapë atë. Pra, sigurohuni që së pari të kapni klasën më specifike. Përndryshe, IDE-të tuaja do të shfaqin një gabim ose paralajmërim për një bllok kodi të paarritshëm.

Provoni ( doSomething(); ) catch (NumberFormatException e) ( // trajtoni NumberFormatException log.error(e); ) catch (IllegalArgumentException e) ( // trajtoni IllegalArgumentException log.error(e); )

Gabimi 3: Përjashtimet e prerjeve dhe hedhjes

Ky është një nga gabimet më të njohura në trajtimin e përjashtimeve në Java. Mund të duket logjike të regjistrohet përjashtimi aty ku është hedhur dhe më pas t'ia kthejë atë telefonuesit, i cili mund të zbatojë një trajtim specifik për rastin specifik të përdorimit. Por ju nuk duhet ta bëni këtë për tre arsye:

1. Nuk keni informacion të mjaftueshëm për rastin e përdorimit që thirrësi i metodës suaj dëshiron të zbatojë. Përjashtimi mund të jetë pjesë e sjelljes së pritur dhe të trajtuar nga klienti. Në këtë rast, nuk ka nevojë të regjistrohet. Kjo do të shtojë një mesazh gabimi të rremë në skedarin e regjistrit, i cili duhet të filtrohet nga ekipi juaj i operacioneve.

2. Mesazhi i regjistrit nuk ofron asnjë informacion që nuk është tashmë pjesë e vetë përjashtimit. Gjurma e tij dhe gjurma e stivës duhet të përmbajë të gjithë informacionin e nevojshëm për ngjarjen e jashtëzakonshme. Postimi e përshkruan atë dhe gjurmimi i stivit ka detaje rreth klasës, metodës dhe linjës në të cilën ndodhi.

3. Mund të regjistroni të njëjtin përjashtim disa herë kur e regjistroni në çdo bllok kapjeje që e kap atë. Kjo do të prishë statistikat në mjetin tuaj të monitorimit dhe do ta bëjë skedarin e regjistrit të vështirë për t'u lexuar për ekipin tuaj të operacioneve dhe zhvillimit.

Regjistroni përjashtimin aty ku e trajtoni

Pra, është më mirë të regjistroni përjashtimin kur e trajtoni atë. Ashtu si në pjesën e mëposhtme të kodit. Metoda doSomething bën një përjashtim. Metoda doMore thjesht e specifikon atë sepse zhvilluesi nuk ka informacion të mjaftueshëm për ta trajtuar atë. Më pas përpunohet në metodën doEvenMore, e cila gjithashtu shkruan një mesazh log.

publik void doEvenMore() (provo ( doMore(); ) catch (NumberFormatException e) ( // trajto NumberFormatException ) kap (IllegalArgumentException e) ( // trajto IllegalArgumentException ) ) publik void doMore() hedh NumberFormatException () IllegalArgumentException ); ) publik void doSomething() hedh NumberFormatException, IllegalArgumentException ( // bëj diçka )

Gabimi 4: Përdorimi i përjashtimeve për kontrollin e rrjedhës

Përdorimi i përjashtimeve për të kontrolluar rrjedhën e aplikacionit tuaj konsiderohet një anti-model për dy arsye kryesore:

Ata në thelb funksionojnë si një deklaratë Go To sepse anulojnë ekzekutimin e bllokut të kodit dhe hidhen në bllokun e parë të kapjes që trajton përjashtimin. Kjo e bën kodin shumë të vështirë për t'u lexuar.

Ato nuk janë aq efikase sa strukturat e përgjithshme të kontrollit Java. Siç sugjeron emri, ju duhet t'i përdorni ato vetëm për ngjarje të jashtëzakonshme dhe JVM nuk i optimizon ato në të njëjtën mënyrë si kodet e tjera. Kështu që është më mirë të përdorni kushtet e duhura për të ndarë qarqet tuaja ose deklaratat nëse-ndryshe për të vendosur kodi i cili bllok duhet të ekzekutohet.

Gabimi 5: hiqni shkakun e përjashtimit

Ndonjëherë mund t'ju duhet të mbështillni një përjashtim në një tjetër. Ekipi juaj mund të ketë vendosur të përdorë një përjashtim specifik për biznesin me kode gabimi dhe trajtim uniform. Nuk ka asgjë të keqe me këtë qasje për sa kohë që nuk eliminoni shkakun.

Kur hedhni një përjashtim të ri, gjithmonë duhet të vendosni përjashtimin origjinal si arsye. Përndryshe, ju do të humbni mesazhin dhe gjurmët e grumbullimit që përshkruajnë ngjarjen e jashtëzakonshme që shkaktoi përjashtimin tuaj. Klasa Exception dhe të gjitha nënklasat e saj ofrojnë disa metoda konstruktori që marrin përjashtimin origjinal si parametër dhe e japin atë si shkak.

Gabimi 6: Përgjithësimi i përjashtimit

Kur përgjithësoni një përjashtim, kapni një të veçantë, si NumberFormatException, dhe në vend të kësaj hidhni një java.lang.Exception jo specifike. Ky është i ngjashëm, por edhe më keq se gabimi i parë që përshkrova në këtë artikull. Jo vetëm që fsheh informacionin për një rast gabimi specifik në API-në tuaj, por gjithashtu e bën më të vështirë aksesin.

Void publik doNotGeneralizeException() hedh Përjashtim ( provo ( doSomething(); ) catch (NumberFormatException e) ( hedh një Përjashtim të ri(e); ) kapur (IllegalArgumentException e) ( hedh një Përjashtim të ri (e); ) )
Siç mund ta shihni në fragmentin e mëposhtëm të kodit, edhe nëse e dini se çfarë përjashtimesh mund të bëjë një metodë, nuk mund t'i kapni ato. Ju duhet të kapni klasën e përgjithshme Exception dhe më pas të kontrolloni llojin e shkakut të saj. Ky kod nuk është vetëm i rëndë për t'u zbatuar, por edhe i vështirë për t'u lexuar. Përkeqësohet edhe më keq nëse e kombinoni këtë qasje me gabimin 5. Kjo heq të gjithë informacionin për ngjarjen e jashtëzakonshme.

Provoni ( doNotGeneralizeException(); ) të kapni (Përjashtim e) (nëse (e.getCause() shembulli i NumberFormatException) ( log.error("NumberFormatException: " + e); ) tjetër nëse (e.getCause() shembulli i IllegalArgumentException () .error("IllegalArgumentException: " + e); ) else (log.error("Përjashtim i papritur: " + e); ) )
Pra, cila është qasja më e mirë?

Jini specifik dhe ruani arsyen e përjashtimit.

Përjashtimet që hidhni duhet të jenë gjithmonë sa më specifike që të jetë e mundur. Dhe nëse jeni duke mbështjellë një përjashtim, duhet të vendosni gjithashtu përjashtimin origjinal si shkak, në mënyrë që të mos humbni gjurmën e stivës dhe informacione të tjera që përshkruan ngjarjen e përjashtimit.

Provoni ( doSomething(); ) kapni (NumberFormatException e) ( hidhni MyBusinessException të ri(e, ErrorCode.CONFIGURATION_ERROR);

Gabimi 7: Shtimi i transformimeve të panevojshme të përjashtimit

Siç e shpjegova më herët, mund të jetë e dobishme të mbështillni përjashtimet në ato të personalizuara nëse vendosni përjashtimin origjinal si shkak. Por disa arkitektë e teprojnë dhe prezantojnë një klasë të veçantë përjashtimi për çdo nivel arkitektonik. Pra, ata kapin përjashtimin në shtresën e qëndrueshmërisë dhe e mbështjellin atë në MyPersistenceException. Shtresa e biznesit e kap dhe e mbështjell në MyBusinessException dhe kjo vazhdon derisa të arrijë në shtresën API ose të trajtohet.

publik void persistCustomer(Customer c) hedh MyPersistenceException ( // persist a Customer ) public void managementCustomer(Customer c) hedh MyBusinessException ( // menaxhon një përpjekje të klientit ( persistCustomer(c); ) kapur (MyPersistenceException) , e.getCode()); ) ) boshllëk publik createCustomer(Customer c) hedh MyApiException ( // krijoni një përpjekje të klientit (manageCustomer(c); ) catch (MyBusinessException e) (hedhni MyApiException(e, e.getCode() );))
Është e lehtë të shihet se këto klasa shtesë të përjashtimit nuk ofrojnë asnjë përfitim. Ata thjesht prezantojnë shtresa shtesë që mbështjellin përjashtimin. Dhe ndërsa do të ishte kënaqësi të mbështillesh një dhuratë me shumë letra shumëngjyrëshe, kjo nuk është një qasje e mirë për zhvillimin e softuerit.

Ju lutemi shtoni informacion

Thjesht mendoni për kodin që duhet të trajtojë përjashtimin, ose për veten tuaj kur duhet të gjeni problemin që shkaktoi përjashtimin. Së pari ju duhet të kaloni disa shtresa përjashtimesh për të gjetur shkakun rrënjësor. Dhe deri më sot, nuk kam parë kurrë një aplikacion që ka marrë këtë qasje dhe ka shtuar informacione të dobishme me secilën shtresë përjashtimi. Ata ose përgjithësojnë mesazhin dhe kodin e gabimit, ose ofrojnë informacion të tepërt.

Pra, jini të kujdesshëm me numrin e klasave të përjashtimit të personalizuar që prezantoni. Gjithmonë duhet të pyesni veten nëse një klasë e re e përjashtimit ofron informacion shtesë ose përfitime të tjera. Në shumicën e rasteve, ju nuk keni nevojë për më shumë se një nivel përjashtimesh të personalizuara për ta arritur këtë.

publik void persistCustomer(Customer c) ( // persist a Customer ) public void managementCustomer(Customer c) hedh MyBusinessException ( // menaxhon një klient hedh MyBusinessException të ri(e, e.getCode()); ) zbrazëti publike krijiminCustomer(Customer c) hedh MyBusinessException ( // krijoni një menaxhim të klientitCustomer(c); )

Çfarë është përjashtimi?

Përjashtim është një ngjarje që ndërpret rrjedhën normale të ekzekutimit. Është një ndërprerje gjatë ekzekutimit të programit Java.

Në këtë tutorial, do të mësoni-

Ka dy lloje gabimesh:

  1. Kompilimi i gabimeve kohore
  2. gabimet e ekzekutimit

Gabimet e kohës së përpilimit mund të klasifikohen përsëri në dy lloje:

  • Gabime sintaksore
  • Gabimet semantike

Shembull i gabimit sintaksor:

në vend të deklarimit int a; gabimisht e ke deklaruar si në a; për të cilin kompajler do të hedhë një gabim.

Shembull: Ju keni deklaruar një variabël int a; dhe pas disa rreshtave të kodit ju përsëri deklaroni një numër të plotë si int a; . Të gjitha këto gabime theksohen kur përpiloni kodin.

Shembull i gabimit në kohën e ekzekutimit

Një gabim në kohën e ekzekutimit quhet një Përjashtimet gabim. Është çdo ngjarje që ndërpret rrjedhën normale të ekzekutimit të programit.

Shembull për përjashtime janë përjashtimi aritmetik, përjashtimi Nullpointer, Pjestoni me zero përjashtim, etj.

Përjashtimet në Java janë diçka që është jashtë kontrollit të zhvilluesve.

Pse kemi nevojë për përjashtim?

Supozoni se keni koduar një program për të hyrë në server. Gjërat funksionuan mirë gjatë zhvillimit të kodit.

Gjatë ekzekutimit aktual të prodhimit, serveri nuk funksionon. Kur programi juaj u përpoq të hynte në të, ngrihet një përjashtim.

Si të trajtoni përjashtimin

Deri më tani kemi parë, përjashtimi është përtej kontrollit të zhvilluesit. Por fajësimi i dështimit të kodit tuaj për çështjet mjedisore nuk është zgjidhje. Ju keni nevojë për një programim të fortë, i cili kujdeset për situata të jashtëzakonshme. Një kod i tillë njihet si trajtues përjashtimi.

Në shembullin tonë, trajtimi i mirë i përjashtimeve do të ishte, kur serveri nuk funksionon, lidhja me serverin rezervë.

Për ta zbatuar këtë, futni kodin tuaj për t'u lidhur me serverin (duke përdorur kushtet tradicionale if dhe else).

Do të kontrolloni nëse serveri nuk funksionon. Nëse po, shkruani kodin për t'u lidhur me serverin rezervë.

Një organizim i tillë i kodit, duke përdorur ciklin "if" dhe "tjetër" nuk është efektiv kur kodi juaj ka përjashtime të shumta java për t'u trajtuar.

Klasa e lidhjes ( if (Server Up) ( // kodi për t'u lidhur me serverin ) tjetër ( // kodi për t'u lidhur me serverin BACKUP ) )

Provoni Catch Block

Java ofron një trajtim të jashtëzakonshëm të integruar.

  1. Kodi normal hyn në a PROVONI bllokoj.
  2. Kodi i trajtimit të përjashtimeve shkon në KAPE bllokoj

Në shembullin tonë, blloku TRY do të përmbajë kodin për t'u lidhur me serverin. Blloku CATCH do të përmbajë kodin për t'u lidhur me serverin rezervë.

Në rast se serveri është i ndezur, kodi në bllokun CATCH do të shpërfillet. Në rast se serveri nuk funksionon, ngrihet një përjashtim dhe kodi në bllokun e kapjes do të ekzekutohet.

Pra, kështu trajtohet përjashtimi në Java.

Sintaksë për përdorimin e "provo dhe kap".

Provo (deklarata(t) ) kapja (emri i tipit të përjashtimit) (deklarata(t) )

Hapi 1) Kopjoni kodin e mëposhtëm në një redaktues

Klasa JavaException ( kryesore publike statike e zbrazët (args varg) ( int d = 0; int n = 20; int fraksion = n/d; System.out.println ("Fundi i kryesore"); ) )

Hapi 2) Ruani skedarin dhe përpiloni kodin. Drejtoni programin duke përdorur komandën, java JavaException

Hapi 3) Një përjashtim aritmetik - pjesëtimi me zero tregohet si më poshtë për rreshtin # 5 dhe rreshti # 6 nuk ekzekutohet kurrë

Hapi 4) Tani le të shohim se si try and catch do të na ndihmojë për të trajtuar këtë përjashtim. Ne do ta vendosim përjashtimin që shkakton linjën e kodit në një provoni bllok i ndjekur nga a kap bllokoj. Kopjoni kodin e mëposhtëm në redaktues.

Klasa JavaException ( kryesore e zbrazët statike publike (args me varg) ( int d = 0; int n = 20; provo ( fraksion int = n / d; System.out.println ("Kjo rresht nuk do të ekzekutohet"); ) kap ( ArithmeticException e) ( System.out.println ("Në bllokun e kapjes për shkak të përjashtimit = " + e); ) System.out.println ("Fundi i kryesore"); ) )

Hapi 5) Ruani, përpiloni dhe ekzekutoni kodin. Do të merrni daljen e mëposhtme

Siç vërehet, përjashtimi trajtohet, dhe rreshti i fundit i kodit gjithashtu ekzekutohet. Gjithashtu, vini re se Linja #7 nuk do të ekzekutohet sepse sapo ngrihet një përjashtim, fluksi i kontrollit kërcen në bllokun e kapjes.

Shënim: Objekti AritmeticException "e" mbart informacion në lidhje me përjashtimin që ka ndodhur, i cili mund të jetë i dobishëm në marrjen e veprimeve të rikuperimit.

Hierarkia e klasës së përjashtimit të Java

Pasi ekzekutohet një deklaratë kapje, të tjerat anashkalohen dhe ekzekutimi vazhdon pas bllokut try/catch. Blloqet e mbivendosura të kapjes ndjekin hierarkinë e përjashtimit.
  • Të gjitha klasat e përjashtimit në Java zgjerojnë klasën 'Throwable'. Throwable ka dy nënklasa, Gabim dhe Përjashtim
  • Klasa Error përcakton përjashtimin ose problemet që nuk pritet të ndodhin në rrethana normale nga programi ynë, shembull Gabim memorie, Gabim harduerik, gabim JVM, etj.
  • Klasa Exception përfaqëson përjashtimet që mund të trajtohen nga programi ynë dhe programi ynë mund të rikuperohet nga ky përjashtim duke përdorur bllokun try and catch
  • Një përjashtim Runtime është një nënklasë e klasës së përjashtimit. Përjashtimi i këtij lloji përfaqëson një përjashtim që ndodh në kohën e ekzekutimit dhe që nuk mund të gjurmohet në kohën e përpilimit. Një shembull i shkëlqyer i të njëjtës është pjestimi me përjashtimin zero, ose përjashtimin e treguesit null, etj
  • Përjashtimi IO gjenerohet gjatë operacioneve hyrëse dhe dalëse
  • Përjashtimet e ndërprera në Java, krijohen gjatë filetimit të shumëfishtë.
Shembull: Për të kuptuar folenë e blloqeve të provoni dhe kapni

Hapi 1)

Klasa JavaException ( kryesore publike statike e zbrazët (args varg) ( provo ( int d = 1; int n = 20; int fraksion = n / d; int g = ( 1 ); g = 100; ) /*catch (Përjashtim e) ( System.out.println("Në orën e kapjes për shkak të përjashtimit = "+e); )*/ kap (ArithmeticException e) ( System.out.println("Në orën e kapjes për shkak të përjashtimit = " + e); ) catch (ArrayIndexOutOfBoundsException e) ( System.out.println ("Në orën e kapjes për shkak të përjashtimit = " + e); ) System.out.println ("Fundi i kryesore"); ) )

Hapi 2) Ruani skedarin dhe përpiloni kodin. Drejtoni programin duke përdorur komandën java JavaException.

Hapi 3) Krijohet një ArrayIndexOutOfBoundsException. Ndryshoni vlerën e int d në 0. Ruani, përpiloni dhe ekzekutoni kodin.

Hapi 4) Duhet të krijohet një Përjashtim Aritmetik.

Hapi 5) Zhkomentoni rreshtin #10 në rreshtin #12. Ruani, përpiloni dhe ekzekutoni kodin.

hapi 6) gabim përpilimi? Kjo ndodh sepse Exception është klasa bazë e ArithmeticException Exception. Çdo përjashtim që ngrihet nga ArithmeticException mund të trajtohet gjithashtu nga klasa Exception. Kështu që blloku i kapjes së ArithmeticException nuk do të ketë kurrë një shans për t'u ekzekutuar, gjë që e bën atë të tepërt. pra gabimi i përpilimit.

Java më në fund Blloko

Blloku i fundit është ekzekutohet pavarësisht nga një përjashtim që ngrihet në bllokun e provës. Eshte opsionale për t'u përdorur me një bllok provoni.

Provoni ( deklarata(t) ) kapni (Emri ExceptiontType) (deklarata(t) ) në fund (deklarata(t) )

Në rast se ngrihet një përjashtim në bllokun try, më në fund blloku ekzekutohet pasi të ekzekutohet blloku i kapjes.

Hapi 1) Kopjoni kodin e mëposhtëm në një redaktues.

Klasa JavaException ( public static void main(string args)( try( int d = 0; int n =20; int fraction = n/d; ) catch(ArithmeticException e)( System.out.println("Në orën e kapjes së duhur në Përjashtim = "+e); ) në fund ( System.out.println ("Brenda bllokut përfundimtar"); ) ) )

Hapi 2) Ruani, përpiloni dhe ekzekutoni kodin.

Hapi 3) prodhimi i pritur. Më në fund blloku ekzekutohet edhe pse është ngritur një përjashtim.

Hapi 4) Ndryshoni vlerën e ndryshores d = 1. Ruani, përpiloni dhe ekzekutoni kodin dhe vëzhgoni daljen. Fundi i formës

Përmbledhje:

  • Një Përjashtim është një gabim në kohën e ekzekutimit e cila ndërpret rrjedhën normale të ekzekutimit të programit Ndërprerja gjatë ekzekutimit të programit quhet gabim ose përjashtim.
  • Gabimet klasifikohen në dy kategori
    • Kompilimi i gabimeve kohore – Gabimet sintaksore, gabimet semantike
    • Gabimet gjatë ekzekutimit - Përjashtim
  • A programi i fuqishëm duhet të trajtojë të gjitha përjashtimet dhe vazhdoni me rrjedhën e tij normale të ekzekutimit të programit. Java ofron një metodë të veçantë të trajtimit të integruar
  • Exception Handler është një grup kodesh që trajton një përjashtim. Përjashtimet mund të trajtohen në Java duke përdorur try & catch.
  • provoni bllokimin: Kodi normal shkon në këtë bllok.
  • blloku i kapjes: Nëse ka një gabim në kodin normal, atëherë ai do të hyjë në këtë bllok

Artikujt kryesorë të lidhur