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.

  • ⚠️ Erand määratletud: Erand on käitusaja sündmus, mis katkestab standardse täitmisjada ja mida esitatakse veatingimust kirjeldava objektina.
  • 🧯 Proovige Catch Blocki: Mähi riskantne kood try-plokki ja sellele järgneb üks või mitu catch-plokki, et teatud erandite tüüpe korrektselt tabada.
  • 🔁 Lõpuks käitumine: Blokk „finally” käivitub alati pärast käske „try” ja „catch”, mistõttu on see ideaalne failide ja soklite sulgemiseks või muude süsteemiressursside vabastamiseks.
  • Erandite hierarhia: Kõik erandid pärivad funktsioonist Throwable, mis hargneb funktsiooniks Error ja Exception, kusjuures RuntimeException katab kontrollimata juhud, näiteks nulliga jagamise.
  • 🧪 Parimad tavad: Püüa esmalt kinni kõige spetsiifilisem erand, väldi tühje catch-plokke, logi sisukaid sõnumeid ja kasuta multicatch-meetodit, et kood oleks lühike ja hallatav.

Erandi käsitlemine Java

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:

  1. Kompileeri ajavead
  2. 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.

Java Välja arvatud käitlemine

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öö.

Java Välja arvatud käitlemine

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.

Java Välja arvatud käitlemine

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.

  1. Tavaline kood läheb a TRY blokeerida.
  2. Erandi käsitlemise kood läheb sisse PÜÜK blokeerida.

Proovige Catch Blocki

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.

Proovige Catch Blocki

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.

Proovige Catch Blocki

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.

Java Erandi hierarhia

  • 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.

KKK

Kontrollitud erandid kontrollitakse kompileerimise ajal ja need tuleb deklareerida või kinni püüda, näiteks IOException. Kontrollimata erandid pikendavad RuntimeExceptioni, esinevad käitusajal ja ei vaja kohustuslikku käsitlemist, näiteks NullPointerException või ArithmeticException.

Blokk "finally" käivitatakse alati pärast try ja catch plokke, olenemata sellest, kas tekkis erand või mitte. See on kõige turvalisem koht ressursside, näiteks failikäepidemete, andmebaasiühenduste või soklite vabastamiseks, tagades toimingute sujuva lõpetamise.

Märksõna „throw” kasutatakse meetodi sees erandiobjekti tekitamiseks, samas kui märksõna „throws” kasutatakse meetodi signatuuris selleks, et deklareerida, et meetod võib edastada teatud kontrollitud erandid oma kutsujale käsitlemiseks.

Jah. Try-plokile võib järgneda finally-plokk ilma catch-plokita. Seda mustrit kasutatakse siis, kui arendaja soovib tagada puhastuskoodi käivitamise isegi siis, kui erand ise edastatakse kutsujale.

Jah. Tehisintellektil põhinevad jälgitavustööriistad analüüsivad pinu traces, logid ja kooditeed, et ennustada, kus käitusaja erandid tõenäoliselt esinevad. Nad pakuvad välja kaitsekontrolle, soovitavad püüdmiskoha paigutamist ja pinnaanomaaliaid, aitavadping meeskonnad ennetavad krahhe enne, kui need tootmisse jõuavad.

Tehisintellekti assistendid analüüsivad pinu traces, seostavad neid lähtekoodiga ning pakuvad välja tõenäolisi algpõhjuseid ja parandusi. Nad genereerivad katsetuste püüdmise malle, soovitavad logimise täiustusi ja kirjutavad isegi vigased meetodid ümber, vähendades oluliselt arendajate diagnoosimisele kuluvat aega. Java erandeid.

Võta see postitus kokku järgmiselt: