Unntakshåndtering inn Java

Hva er unntak i Java?

Unntak i Java er en hendelse som avbryter kjøringen av programinstruksjoner og forstyrrer den normale flyten av programkjøringen. Det er et objekt som omslutter en feilhendelsesinformasjon som oppstod i en metode, og den sendes til kjøretidssystemet. I Java, unntak brukes hovedsakelig for å indikere ulike typer feiltilstander.

Det er to typer feil:

  1. Kompiler tidsfeil
  2. Kjøretidsfeil

Kompileringstidsfeil kan igjen klassifiseres i to typer:

  • Syntaksfeil
  • Semantiske feil

Syntaksfeil Eksempel:

I stedet for å erklære int a; du feilaktig erklærte det som in a; for hvilken kompilator vil gi en feil.

Eksempel: Du har deklarert en variabel int a; og etter noen linjer med kode erklærer du igjen et heltall som int a;. Alle disse feilene er uthevet når du kompilerer koden.

Eksempel på kjøretidsfeil

En kjøretidsfeil kalles en unntak feil. Det er enhver hendelse som avbryter den normale flyten av programkjøring. Eksempler på unntak er, aritmetisk unntak, Nullpointer-unntak, Del med null unntak, osv. Unntak i Java er noe som er utenfor utviklerens kontroll.

Klikk her. hvis videoen ikke er tilgjengelig

Hvorfor trenger vi unntak?

Anta at du har kodet et program for å få tilgang til serveren. Ting fungerte bra mens du utviklet koden.

Java Avvikshåndtering

Under selve produksjonskjøringen er serveren nede. Når programmet ditt prøvde å få tilgang til det, oppstår et unntak.

Java Avvikshåndtering

Hvordan håndtere unntak

Så langt vi har sett, er unntak utenfor utviklerens kontroll. Men å skylde på koden din på miljøspørsmål er ikke en løsning. Du trenger en robust programmering, som tar seg av eksepsjonelle situasjoner. Slik kode er kjent som Unntaksbehandler.

I vårt eksempel vil god unntakshåndtering være, når serveren er nede, koble til backupserveren.

Java Avvikshåndtering

For å implementere dette, skriv inn koden din for å koble til serveren (ved bruk av tradisjonelle if og else-betingelser). Du vil sjekke om serveren er nede. Hvis ja, skriv koden for å koble til backupserveren. Slik organisering av kode, bruk av "hvis" og "annet"-løkke er ikke effektiv når koden din har flere java unntak å håndtere.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Prøv Catch Block

Java gir en innebygd eksepsjonell håndtering.

  1. Den vanlige koden går inn i en PRØV blokkere.
  2. Unntakshåndteringskoden går inn i CATCH blokkere

Prøv Catch Block

I vårt eksempel vil TRY-blokken inneholde koden for å koble til serveren. CATCH-blokken vil inneholde koden for å koble til backupserveren. I tilfelle serveren er oppe, vil koden i CATCH-blokken bli ignorert. I tilfelle serveren er nede, oppstår et unntak, og koden i catch-blokken vil bli utført.

Prøv Catch Block

Så dette er hvordan unntaket håndteres i Java.

Syntaks for bruk av prøv og fang

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

Eksempel

Trinn 1) Kopier følgende kode inn i et redigeringsprogram

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Trinn 2) Lagre filen og kompiler koden. Kjør programmet ved å bruke kommando, java JavaUnntak

Trinn 3) Et aritmetisk unntak – del med null vises som nedenfor for linje # 5 og linje # 6 blir aldri utført

Trinn 4) La oss nå se undersøke hvordan forsøk og fangst vil hjelpe oss med å håndtere dette unntaket. Vi vil sette unntaket som forårsaker kodelinjen i en prøve blokk, etterfulgt av en å fange blokkere. Kopier følgende kode inn i editoren.

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");
 }
}

Trinn 5) Lagre, kompiler og kjør koden. Du vil få følgende utdata

Prøv Catch Block

Som du ser, blir unntaket håndtert, og den siste kodelinjen blir også utført. Vær også oppmerksom på at linje #7 ikke vil bli utført pga så snart et unntak er hevet, hopper kontrollstrømmen til fangblokken.

OBS: AritmeticException-objektet "e" inneholder informasjon om unntaket som har skjedd, noe som kan være nyttig for å utføre gjenopprettingshandlinger.

Java Unntaksklasse Hierarki

Etter at en catch-setning er utført, blir de andre forbigått, og utførelsen fortsetter etter try/catch-blokken. De nestede fangstblokkene følger unntakshierarkiet.


Java Unntakshierarki

  • Alle unntaksklasser i Java utvide klassen 'Kastbar'. Throwable har to underklasser, Error og Exception
  • Error-klassen definerer unntaket eller problemene som ikke forventes å oppstå under normale omstendigheter av programmet vårt, for eksempel minnefeil, maskinvarefeil, JVM-feil osv.
  • Unntaksklassen representerer unntakene som kan håndteres av programmet vårt, og programmet vårt kan gjenopprettes fra dette unntaket ved å bruke try and catch block
  • Et Runtime-unntak er en underklasse av unntaksklassen. Unntaket av denne typen representerer unntak som oppstår på kjøretidspunktet og som ikke kan spores på kompileringstidspunktet. Et utmerket eksempel på det samme er å dele med null unntak, eller null-peker unntak, etc
  • IO-unntak genereres under inngangs- og utgangsoperasjoner
  • Avbrutt unntak i Java, genereres under flere tråder.

Eksempel: For å forstå hekking av prøve og fange blokker

Trinn 1) Kopier følgende kode inn i en editor.

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");
 }
}

Trinn 2) Lagre filen og kompiler koden. Kjør programmet ved å bruke kommandoen, Java JavaUnntak.

Trinn 3) En ArrayIndexOutOfBoundsException genereres. Endre verdien av int d til 0. Lagre, kompiler og kjør koden.

Trinn 4) Et aritmetisk unntak må genereres.

Trinn 5) Fjern kommentarene fra linje #10 til linje #12. Lagre, kompiler og kjør koden.

Trinn 6) Kompileringsfeil? Dette er fordi Exception er basisklassen til ArithmeticException Exception. Ethvert unntak som er reist av ArithmeticException kan også håndteres av Exception-klassen. Så catch-blokken til ArithmeticException vil aldri få en sjanse til å bli utført, noe som gjør den overflødig. Derav kompilasjonsfeilen.

Java Endelig blokkere

Den endelige blokken er utføres uavhengig av at et unntak blir reist i prøveblokken. Det er det valgfritt å bruke med en prøveblokk.

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

  statement(s)

 } finally {

  statement(s)

 }

I tilfelle det oppstår et unntak i try-blokken, blir blokken til slutt utført etter at catch-blokken er utført.

Eksempel

Trinn 1) Kopier følgende kode inn i en editor.

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");
  }
}
}

Trinn 2) Lagre, kompiler og kjør koden.

Trinn 3) Forventet utgang. Til slutt blir blokk utført selv om et unntak er opphevet.

Trinn 4) Endre verdien av variabel d = 1. Lagre, kompiler og kjør koden og observer utdataene. Nederst i skjemaet

Sammendrag

  • An Unntaket er en kjøretidsfeil som avbryter den normale flyten av programkjøring. Forstyrrelser under kjøringen av programmet omtales som feil eller unntak.
  • Feil er klassifisert i to kategorier
    • Kompileringstidsfeil – Syntaksfeil, Semantiske feil
    • Kjøretidsfeil - Unntak
  • A robust program skal håndtere alle unntak og fortsett med sin normale flyt av programkjøring. Java gir en innebygd eksepsjonell håndteringsmetode
  • Exception Handler er et sett med kode som håndterer et unntak. Unntak kan håndteres i Java ved hjelp av prøv og fang.
  • Prøv å blokkere: Normal kode går på denne blokken.
  • Fangstblokk: Hvis det er feil i normal kode, vil den gå inn i denne blokken

Oppsummer dette innlegget med: