Erandi käsitlemine Java

Mis on erand Java?

Erand aastal Java on sündmus, mis katkestab programmi käskude täitmise ja häirib programmi täitmise normaalset kulgu. See on objekt, mis mähib meetodi sees toimunud veasündmuse teabe ja edastatakse käitusaegsele süsteemile. sisse Java, kasutatakse erandeid peamiselt erinevat tüüpi veatingimuste näitamiseks.

On kahte tüüpi vigu:

  1. Kompileeri ajavead
  2. Kestusvead

Kompileerimise aja vead võib jällegi liigitada 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 veateate väljastab.

Näide: olete 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 viga nimetatakse Erandeid viga. See on iga sündmus, mis katkestab programmi täitmise normaalse voo. Erandite näited on aritmeetiline erand, nullpunkti erand, nulliga jagamise erand jne. Java on midagi, mida arendajad ei kontrolli.

Click siin kui video pole juurdepääsetav

Miks me vajame erandit?

Oletame, et olete serverile juurdepääsuks kodeerinud programmi. Koodi väljatöötamise ajal toimisid asjad hästi.

Java Välja arvatud käitlemine

Tegeliku tootmistegevuse ajal on server maas. Kui teie programm proovis sellele juurde pääseda, tehakse erand.

Java Välja arvatud käitlemine

Kuidas käsitleda erandit

Seni oleme näinud, et erand on väljaspool arendaja kontrolli. Kuid kooditõrke süüdistamine keskkonnaprobleemides ei ole lahendus. Teil on vaja tugevat programmeerimist, mis hoolitseb erandlike olukordade eest. Sellist koodi tuntakse kui Erandi käsitleja.

Meie näites oleks hea erandite käsitlemine see, kui server ei tööta, looge ühendus varuserveriga.

Java Välja arvatud käitlemine

Selle rakendamiseks sisestage serveriga ühenduse loomiseks oma kood (kasutades traditsioonilisi if and else tingimusi). Kontrollite, kas server on maas. Kui jah, kirjutage varuserveriga ühenduse loomiseks kood. Selline koodi korraldamine, kasutades silmust "if" ja "muu", 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 pakub sisseehitatud erakordset juhitavust.

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

Proovige Catch Blocki

Meie näites sisaldab plokk TRY serveriga ühenduse loomiseks koodi. CATCH plokk sisaldab koodi varuserveriga ühenduse loomiseks. Kui server töötab, ignoreeritakse CATCH-plokis olevat koodi. Kui server on maas, tehakse erand ja käivitatakse püüdmisplokis olev kood.

Proovige Catch Blocki

Niisiis, nii käsitletakse erandit Java.

Proovi ja püüdmise kasutamise süntaks

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Näide

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) Salvestage fail ja kompileerige kood. Käivitage programm käsuga java JavaErand

Step 3) Aritmeetiline erand – nulliga jagamine on näidatud alloleval real #5 ja rida #6 ei täideta kunagi

Step 4) Nüüd vaatame, kuidas proovimine ja püüdmine aitab meil selle erandiga toime tulla. Me paneme koodirea põhjustava erandi a-sse 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) Salvestage, kompileerige ja käivitage kood. Saate järgmise väljundi

Proovige Catch Blocki

Nagu näete, käsitletakse erandit ja käivitatakse ka viimane koodirida. Samuti pange tähele, et rida nr 7 ei täideta, kuna niipea, kui erand on tõstetud, hüppab juhtimisvoog püüdmisplokki.

Märge: Objekt AritmeticException Object "e" sisaldab teavet toimunud erandi kohta, mis võib olla kasulik taastamistoimingute tegemisel.

Java Erandklassi hierarhia

Pärast ühe püüdmislause täitmist lähevad teised mööda ja täitmine jätkub pärast try/catch plokki. Pesastatud püüdmisplokid järgivad erandi hierarhiat.


Java Erandi hierarhia

  • Kõik erandklassid Java laiendada klassi 'Visatav'. Throwable'il on kaks alamklassi, viga ja erand
  • Klass Error määratleb erandi või probleemid, mida meie programm tavaolukorras ei eelda, näiteks mälutõrge, riistvaratõrge, JVM-i viga jne
  • Klass Exception esindab erandeid, mida meie programm saab käsitleda ja meie programmi saab sellest erandist taastada proovi ja püüdmise ploki abil
  • Käitusaja erand on erandiklassi alamklass. Seda tüüpi erand tähistab erandit, mis ilmneb käitamise ajal ja mida ei saa kompileerimise ajal jälgida. Selle suurepärane näide on nulliga jagamise erand või nullkursori erand jne
  • IO erand genereeritakse sisend- ja väljundtoimingute ajal
  • Katkestatud erandid sisse Java, tekib mitme keermestamise käigus.

Näide: Proovi- ja püüdmisplokkide pesastumise mõistmiseks

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) Salvestage fail ja kompileerige kood. Käivitage programm käsuga, Java JavaErand.

Step 3) ArrayIndexOutOfBoundsException luuakse. Muutke int d väärtuseks 0. Salvestage, kompileerige ja käivitage kood.

Samm 4) Tuleb luua aritmeetiline erand.

Step 5) Tühista rida nr 10 kuni real nr 12. Salvestage, kompileerige ja käivitage kood.

Step 6) Kompileerimise viga? Seda seetõttu, et Erand on Aritmeetilise erandi erandi põhiklass. Kõiki ArithmeticExceptioni tekitatud erandeid saab käsitleda ka erandiklassiga. Seega ei saa Aritmeetilise erandi püüdmisplokki kunagi käivitada, mis muudab selle üleliigseks. Sellest ka kompileerimisviga.

Java Lõpuks blokeeri

Viimane plokk on täidetakse olenemata erandi tegemisest prooviplokis. On küll Valikuline prooviplokiga kasutamiseks.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

Juhul, kui prooviplokis tõstetakse esile erand, siis lõpuks käivitatakse blokk pärast püüdmisploki täitmist.

Näide

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) Salvestage, kompileerige ja käivitage kood.

Step 3) Oodatav väljund. Lõpuks käivitatakse blokk, kuigi erand on tehtud.

Step 4) Muutke muutuja d = 1 väärtust. Salvestage, kompileerige ja käivitage kood ning jälgige väljundit. Vormi alumine osa

kokkuvõte

  • An Erandiks on käitusaegne viga mis katkestab programmi täitmise normaalse voo.Programmi täitmisel esinevat häiret nimetatakse veaks või erandiks.
  • Vead liigitatakse kahte kategooriasse
    • Kompileerimise aja vead – süntaksivead, semantilised vead
    • Kestusvead – erand
  • A jõuline programm peaks käsitlema kõiki erandeid ja jätkake oma tavapärase programmi täitmisega. Java pakub sisseehitatud erakordset käsitsemismeetodit
  • Exception Handler on koodikomplekt, mis käsitleb erandit. Erandeid saab käsitleda Java kasutades proovi ja püüda.
  • Proovige blokeerida: Sellele plokile läheb tavaline kood.
  • Püügiplokk: Kui tavalises koodis on viga, läheb see sellesse plokki