Erandi käsitlemine Java
⚡ Nutikas kokkuvõte
Java Erandihaldus pakub struktureeritud mehhanismi programmi normaalset voogu häirivate käitusaja vigade haldamiseks. See kasutab märksõnu try, catch, finally, throw ja throws erandlike tingimuste tuvastamiseks, isoleerimiseks ja neist taastumiseks, hoides samal ajalping rakendused on töökindlad ja prognoositavad.

Mis on erand Java?
An Erand aastal Java on sündmus, mis katkestab programmi käskude täitmise ja häirib programmi normaalset täitmist. See on objekt, mis pakib meetodis toimunud veasündmuse teabe ja edastab selle käitusaja süsteemile. Java, kasutatakse erandeid peamiselt erinevat tüüpi veatingimuste signaalimiseks, et arendajad saaksid neile kontrollitud viisil reageerida.
Vigu on kahte põhikategooriasse Java:
- Kompileeri ajavead
- Kestusvead
Kompileerimisaja vigu saab jagada veel kahte tüüpi:
- Süntaksivead
- Semantilised vead
Süntaksivigade näide:
Selle asemel, et deklareerida int a; kuulutasite selle ekslikult kui in a;, mille puhul kompilaator viskab vea.
Semantiliste vigade näide: Sa oled deklareerinud muutuja int a; ja pärast mõnda koodirida deklareerite taas täisarvu kui int a;. Kõik need vead tõstetakse koodi koostamisel esile.
Käitusaja vigade näide
Käitusaja veaks nimetatakse ErandSee on iga sündmus, mis katkestab programmi tavapärase täitmise. Erandite näideteks on aritmeetiline erand, NullPointerException, nulliga jagamise erand ja palju muud. Erandid Java on tingimused, mis on sageli arendaja otsese kontrolli alt väljas.
Click siin kui video pole juurdepääsetav
Miks me vajame erandite käsitlemist?
Oletame, et olete programmeerinud programmi serverile juurdepääsuks. Arendamise ajal toimivad asjad hästi.ping kood kohalikus keskkonnas kontrollitud tingimustes.
Tegeliku tootmisprotsessi ajal võib server olla maas. Kui teie programm üritab sellele juurde pääseda, tekib erand ja ilma korraliku käsitlemiseta lõpetab programm järsult töö.
Kuidas erandiga toime tulla Java
Siiani oleme näinud, et erand on sageli arendaja kontrolli alt väljas. Koodivea süüdistamine keskkonnaprobleemides ei ole aga tegelik lahendus. Teil on vaja robustset programmeerimist, mis hoolitseb erandlike olukordade eest. Sellist koodi tuntakse kui Erandite käitleja.
Meie näites tähendaks hea erandite käsitlemine seda, et kui peamine server on maas, loob programm automaatselt ühenduse varuserveriga.
Selle rakendamiseks võiksite kirjutada koodi serveriga ühenduse loomiseks traditsiooniliste if ja else tingimuste abil. Kontrollite, kas server on maas, ja kui jah, siis kirjutate koodi varuserveriga ühenduse loomiseks. Selline koodi korraldus „if” ja „else” harude abil ei ole efektiivne, kui teie koodil on mitu Java erandid käsitlema.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Proovige Catch Blocki Java
Java pakub sisseehitatud erandite käsitlemise mehhanismi, mis eraldab tavalise loogika vea taastamise loogikast.
- Tavaline kood läheb a TRY blokeerida.
- Erandi käsitlemise kood läheb sisse PÜÜK blokeerida.
Meie näites sisaldab TRY-plokk serveriga ühenduse loomiseks vajaliku koodi. CATCH-plokk sisaldab varuserveriga ühenduse loomiseks vajaliku koodi. Kui server on üleval, ignoreeritakse CATCH-ploki koodi. Kui server on maas, tekitatakse erand ja catch-ploki kood käivitatakse.
Seega käsitletakse erandit järgmiselt Java.
Süntaks try ja catch funktsioonide kasutamiseks
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Näide proovimisblokist
Step 1) Kopeerige järgmine kood redaktorisse.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Step 2) Salvesta fail ja kompileeri kood. Käivita programm käsuga java JavaErand.
Step 3) 5. real on näidatud aritmeetiline erand, jaga nulliga, ja 6. rida ei täideta kunagi.
Step 4) Nüüd uurime, kuidas try ja catch aitavad meil selle erandiga toime tulla. Paneme erandi põhjustava koodirea sisse püüdma blokk, millele järgneb a saak blokk. Kopeerige järgmine kood redaktorisse.
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"); } }
Step 5) Salvesta, kompileeri ja käivita kood. Saad järgmise väljundi.
Nagu näete, käsitletakse erandit ja käivitatakse ka viimane koodirida. Samuti pange tähele, et 7. rida ei käivitata, sest niipea, kui erand on tõstetud, hüppab juhtimisvoog püüdmisplokki.
Märge: ArithmeticException objekt „e” kannab teavet tekkinud erandi kohta, mis võib olla kasulik taastamistoimingute tegemisel.
Java Erandklassi hierarhia
Pärast ühe catch-lause täitmist jäetakse teised vahele ning täitmine jätkub pärast try ja catch plokke. Pesastatud catch-plokid peavad järgima erandite hierarhiat kõige spetsiifilisemast alamklassist kõige üldisema ülemklassini.
- Kõik erandklassid Java Laienda klassi Throwable. Throwable'il on kaks alamklassi: Error ja Exception.
- Klass Error määratleb erandid või probleemid, mida teie programmis tavapärastes tingimustes ei esine, näiteks mäluviga, riistvaraviga või JVM-i viga.
- Klass „Exception” esindab erandeid, mida teie programm saab käsitleda, ja teie programm saab nendest eranditest taastuda try- ja catch-plokkide abil.
- RuntimeException on Exception-klassi alamklass. Seda tüüpi erandid esindavad kontrollimata erandeid, mis esinevad käitusajal ja mida ei saa kompileerimise ajal tuvastada. Headeks näideteks on nulliga jagamise erand ja nullpointeri erand.
- IOException genereeritakse sisend- ja väljundoperatsioonide ajal.
- Katkestatud erand sees Java genereeritakse mitmelõimeliste toimingute ajal, kui lõim katkeb.
Näide: try ja catch plokkide pesastamine
Step 1) Kopeerige järgmine kood redaktorisse.
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"); } }
Step 2) Salvesta fail ja kompileeri kood. Käivita programm käsuga, Java JavaErand.
Step 3) Luuakse ArrayIndexOutOfBoundsException. Muutke int d väärtus 0-ks. Salvestage, kompileerige ja käivitage kood.
Step 4) Tuleb genereerida aritmeetiline erand (ArithmeticException).
Step 5) Eemalda kommentaar realt 10 kuni reale 12. Salvesta, kompileeri ja käivita kood.
6. samm) Kompileerimisviga? See on nii, sest Exception on ArithmeticExceptioni baasklass. Iga ArithmeticExceptioni poolt tekitatud erandit saab samuti Exception klass käsitleda. Seega ei saa ArithmeticExceptioni catch-plokk kunagi võimalust käivituda, mis muudab selle üleliigseks. Seega tekib kompileerimisviga.
Java Lõpuks blokeeri
Viimane plokk on täidetakse olenemata erandi tegemisest prooviplokis. On küll Valikuline kasutamiseks koos try-plokiga. Finally-plokk on õige koht ressursside, näiteks andmebaasiühenduste, failide või võrgusoklite vabastamiseks.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Kui try-plokis tekib erand, siis finally-plokk käivitatakse pärast catch-ploki lõppemist.
Näide lõplikust blokeerimisest
Step 1) Kopeerige järgmine kood redaktorisse.
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"); } } }
Step 2) Salvesta, kompileeri ja käivita kood.
Step 3) Oodatav väljund: finally plokk käivitatakse isegi erandi tekkimisel.
Step 4) Muuda muutuja d väärtust 1-ks. Salvesta, kompileeri ja käivita kood ning jälgi väljundit.
Parimad tavad Java Välja arvatud käitlemine
Mõne tõestatud reegli järgimine aitab teil oma Java kood on vastupidav, loetav ja hõlpsasti silutav:
- Erandite hierarhia terviklikkuse säilitamiseks püüa esmalt kinni kõige spetsiifilisem erand ja seejärel üldisemad.
- Väldi tühje catch-plokke. Logi vähemalt erand, et algpõhjus kunagi kaotsi ei läheks.
- Failide, soklite ja andmebaasiühenduste vabastamiseks kasutage blokki „finally” või proovige ressursse.
- Kontrollitud erandeid tuleb kasutada ainult siis, kui helistaja saab mõistlikult taastuda, ja programmeerimisvigade korral tuleb kasutada kontrollimata erandeid.
- Mähi madala taseme erandid sisuka ärierandi sisse, et API funktsionaalsus säiliks.tracts puhas.
- Ära kunagi neela InterruptedException'i mitmelõimelises koodis vaikselt alla, taasta selle asemel katkestuse lipp.







