java exceptions exception handling with examples
Denne videoopplæringen om Java-unntak Forklarer alt om unntakshåndtering i Java. Du vil lære om unntakshierarki, typer, klassemetoder og mer:
Når vi kjører Java-programmer, blir normal oppførsel eller normal flyt av programmet avbrutt på grunn av uventede hendelser.
For eksempel, vi åpner en fil for å lese dataene. Når anropet Åpne fil utføres, finner vi at filen vi prøver å åpne mangler. Dette resulterer i avbrudd av den normale strømmen av programmet.
Denne hendelsen som påvirker eller avbryter den normale flyt av programmet kalles “ Unntak ”.
=> Besøk her for å utforske Java Training Series for alle.
Her er en videoopplæring om håndtering av Java-unntak:
Hva du vil lære:
Unntakshåndtering i Java
Når det oppstår et unntak i programmet, avsluttes programgjennomføringen. Siden dette er en brå avslutning, genererer systemet en melding og viser den. Meldingen generert av systemet kan være kryptisk som noen koder eller uleselig.
Dermed burde den normale brukeren forstå hvorfor programmet brått stoppet utførelsen, han / hun burde vite årsaken. Systemgenererte meldinger som et resultat av unntak er kanskje ikke nyttige. I Java kan vi håndtere unntaket og gi meningsfylte meldinger til brukeren om problemet.
Denne håndteringen av unntak, ofte kjent som 'Avvikshåndtering' er en av de fremtredende funksjonene i Java-programmering.
Årsaker til at unntaket kan oppstå
Vi kan ha forskjellige grunner som gjør at unntak kan oppstå. Hvis det er et unntak relatert til inndata, kan årsaken være at inndataene er feil eller uleselige.
hvordan du starter et nytt prosjekt i formørkelse
Hvis vi får et unntak for fil I / O, er det ganske mulig at filene vi har å gjøre med ikke eksisterer. På et annet tidspunkt kan det være feil som nettverksproblemer, skriveren ikke er tilgjengelig eller fungerer osv.
I et program, bortsett fra unntak, får vi også feil. Derfor, for å håndtere unntakene effektivt, må vi være klar over forskjellene mellom feil og unntak.
En feil indikerer et mer alvorlig problem med applikasjonen, og applikasjonen skal ikke prøve å fange den. Tvert imot er unntaket et vilkår som enhver rimelig anvendelse vil prøve å fange.
Dermed er en feil i applikasjonen mer alvorlig, og applikasjonene vil krasje når de støter på en feil. Unntak derimot forekommer i kode og kan håndteres av programmereren ved å gi korrigerende handlinger.
Hva er unntakshåndtering?
Unntakshåndteringen i Java er en mekanisme der den normale strømmen til applikasjonen opprettholdes. For å gjøre dette bruker vi en kraftig mekanisme for å håndtere kjøretidsfeil eller unntak i et program.
En sekvens med kode som brukes til å håndtere unntaket kalles “Exception handler”. En unntaksbehandler avhører konteksten på det tidspunktet da unntaket skjedde. Dette betyr at den leser de variable verdiene som var i omfang mens unntaket skjedde, og deretter gjenoppretter Java-programmet for å fortsette med normal flyt.
Fordeler med unntakshåndtering
Den største fordelen med Unntakshåndtering er at den opprettholder normal flyt av applikasjonen til tross for at det forekommer et unntak. Når et unntak oppstår, avslutter programmet vanligvis brått.
Å ha en unntakshåndterer i et program vil ikke føre til at programmet avsluttes brått. I stedet sørger en unntaksbehandler for at alle utsagnene i programmet kjøres normalt, og at programflyten ikke brytes brått.
Unntakshierarki i Java
Diagrammet nedenfor viser unntakshierarkiet i Java. Klassen java.lang.Throwable (etterkommere av objektklassen) er rotklassen til Java Exception. Klassene Unntak og feil er avledet fra denne klassen.
Unntaksklasse er basisklassen for alle de andre unntakene.
Nedenfor er et hierarki av Exception-klassen i Java som viser alle de viktigste unntakene som en Java-programmerer bør være klar over.
Unntaksklasse i Java
Som vist i hierarkidiagrammet har klasse Throwable to direkte underklasser, dvs. unntak og feil. Unntak fra en ekstern kilde er beskrevet i klassen Unntak.
Exception-klassen erklærer konstruktørene som de samme som Throwable-klasser, og påkallelse av hver konstruktør påkaller også sin Throwable-motstykke. Unntaksklasse deklarerer ikke metodene sine, den arver kastbare klassemetoder.
Konstruktørene og metodene som Exception-klassen bruker er presentert nedenfor.
Konstruktører
Bygger Beskrivelse offentlig unntak () En standardkonstruktør som konstruerer et nytt unntak med meldingen som null. offentlig unntak (strengmelding) Konstruktør for å konstruere et nytt unntak med den gitte meldingen. I dette tilfellet initialiseres ikke årsaken, og en etterfølgende samtale til Throwable.initCause (java.lang.Trowable) kan brukes til å initialisere årsaken. offentlig unntak (strengmelding, kastbar årsak) Konstruerer et nytt unntak ved hjelp av en gitt melding og årsak. offentlig unntak (kastbar årsak) Konstruerer et nytt unntak med den gitte årsaken og en melding gitt av (årsak == null? Null: årsak.tilString ()) (som vanligvis inneholder årsaken til klasse og detalj). beskyttet unntak (strengmelding, kastbar årsak, boolsk mulig undertrykkelse, boolsk skrivbar stakkspor) Konstruerer et nytt unntak med den gitte meldingen, årsak, undertrykkelse (aktivert eller deaktivert) og den skrivbare stakksporingen (aktivert eller deaktivert).
Metoder
Metode Prototype | Beskrivelse |
---|---|
offentlig streng getMessage () | Få en detaljert melding om unntaket som skjedde. |
offentlig kastbar getCause () | Få årsaken til unntaket representert av en kastbar gjenstand |
offentlig streng til streng () | Sammenføyer navnet på klassen med resultatet av getMessage () og returnerer den resulterende strengen. |
public void printStackTrace () | Skriver ut resultatet av toString () og innholdet i stabelsporingen til feilutgangsstrømmen, System.err. |
offentlig StackTraceElement () getStackTrace () | Få hvert element i stabelspor i form av en matrise. |
offentlig kastbar fillInStackTrace () | Fyll stabelspor med gjeldende stabelspor. |
Unntak Eksempel
Deretter presenterer vi et Java-program for å demonstrere et grunnleggende unntakseksempel. Her gir vi en strengvariabel initialisert til en nullverdi. Når vi prøver å skrive ut denne variabelen, kastes et unntak da strengverdien ikke kan være null.
class Main { public static void main(String args()){ //declare a String variable and initialize it to null String myStr = null; //print the string System.out.println(myStr.length()); } }
Produksjon
Typer av unntak i Java
Java støtter tre typer unntak:
- Sjekket unntak
- Ukontrollert unntak
- Feil
I denne delen vil vi diskutere alle de ovennevnte tre typene.
# 1) Krysset av unntak
Noen unntak blir sjekket på kompileringstidspunktet når koden kompileres. Dette er “Avmerkede unntak”. Java-programmet kaster en kompileringsfeil når den finner ut at koden i et program er utsatt for feil.
Vi kan ta vare på kompileringsfeilene som kastes av avkrysset unntak ved å håndtere unntakene ved å enten legge inn koden i en prøvefangstblokk eller bruke kasteordet.
I unntakshierarkiet er klassen som direkte arver Throwable-klassen som IOException, ClassNotFoundException, etc. alle sjekket unntak bortsett fra klassene RuntimeException og Error. Dette er ukontrollerte unntak.
Følgende Java-program demonstrerer de avmerkede unntakene, FileNotFoundException og IOException. I dette programmet prøver vi å åpne en ikke-eksisterende fil og lese fra den.
Siden filen ikke eksisterer, kaster den åpne filmetoden FileNotFoundException. Deretter, når vi prøver å lese innholdet i filen og lukke filen, kaller metodene samtaler IOException.
import java.io.*; class Main { public static void main(String args()) { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Produksjon
I ovennevnte utgang, da unntaksbehandleren er fraværende, får vi kompileringsfeil for avmerkede unntak.
La oss nå gi en kaste-klausul for dette programmet. Siden foreldre til FileNotFoundException er IOException, vil vi bare spesifisere IOException etter kaste-setningen.
import java.io.*; class Main { public static void main(String args()) throws IOException { FileInputStream fis = null; //Open a file fis = new FileInputStream('C:/myfile.txt'); int k; //read contents of the file while(( k = fis.read() ) != -1) { System.out.print((char)k); } //close the file fis.close(); } }
Produksjon
Når vi håndterer unntaket, sett fra utdataene, gir det mer meningsfull utgang i stedet for kompileringsfeil.
# 2) Uhaket unntak
Uavmerkede unntak er unntakene som blir sjekket på kjøretid. Derfor, til tross for unntak, vil en samling av programmer lykkes. De fleste av de ukontrollerte unntakene kastes på grunn av dårlige data som brukes i programmet.
Klassene som arver “RuntimeException” er ukontrollerte unntak. Unntak som ArrayIndexOutofBounds Exception, ArithmeticException, NullPOinterException, etc. er eksempler på ukontrollerte unntak.
Følgende program demonstrerer et ukjent unntak for kjøretid som er forårsaket av å dele et tall med null.
class Main { public static void main(String args()) { int num1=10; int num2=0; //divide both numbers and print the result int result=num1/num2; System.out.println(result); } }
Produksjon
Vi ser at programmet er satt sammen vellykket, og deretter blir ArithmeticException kastet ved kjøretid.
Eksempler på ukontrollert unntak:
- ArrayIndexOutOfBoundsException
- NullPointerException
- IllegalArgumentException
- NumberFormatException
Bortsett fra de to unntakene ovenfor, er det få flere kontrollerte unntak, inkludert:
- SQLException
- InvocationTargetExecption
# 3) Feil
Feil er vanligvis en irreversibel og uopprettelig situasjon i et program, og når en feil oppstår, krasjer programmene. Noen av eksemplene på feil i et program er OutOfMemoryError, AssertionError og VirtualMachineError, etc.
Feilklasse arver fra Throwable-klassen. Feil beskriver en situasjon som ikke kan håndteres og resulterer i at et program krasjer.
La oss diskutere OutOfMemory-feilen i dette avsnittet som et eksempel på feil.
Vi vet at alle objektene i Java tildeles ved hjelp av den nye operatøren og er lagret på dyngen. Når haugen går tom for minne, kan ikke Java Virtual Machine (JVM) allokere objektet. Samtidig kan ikke søppeloppsamleren frigjøre noe minne. Denne situasjonen gir opphav til OutOfMemory-feilen.
OutOfMemoryError i Java vil se ut som vist nedenfor:
'exception in thread 'main' java.lang.outofmemoryerror: java heap space'
Tilstedeværelsen av OutOfMemoryError i et program betyr at for mye data blir behandlet eller at objektene holdes for lenge. Noen ganger kan det også være et tredjepartsbibliotek som bruker minne.
Årsaker til OutOfMemoryError
# 1) Java Heap Space
Hvis en applikasjon har for mange sluttbehandlere, gjenvinnes ikke klasseobjektene som har Finalize-metoden av søppeloppsamleren umiddelbart, men blir satt i kø for å bli ferdig på et senere tidspunkt. Noen ganger kan ikke sluttføringen følge med på tiden, og heapminnet fylles opp, noe som resulterer i OutOfMemoryError.
En annen grunn til OutOfMemoryError er at den angitte dyngstørrelsen kan være utilstrekkelig for applikasjonen.
Følgende kode demonstrerer OutOfMemoryError som kan oppstå på grunn av en enorm datastørrelse deklarert for en matrise.
import java.util.*; public class Main { static List list = new ArrayList(); public static void main(String args()) throws Exception { Integer() array = new Integer(100000 * 100000); } }
Produksjon
# 2) Permgen Space
Permanent generasjonsområde i minnet kan også være oppbrukt og kan generere OutOfMemory-feil.
Størrelsen på PermGen-regionen blir satt under JVM-lanseringen. Hvis brukeren ikke angir størrelsen, brukes standardstørrelsen som er plattformspesifikk.
Selv om de to ovennevnte vanligvis er hovedårsakene til OutOfMemoryError-forekomst, kan det være andre årsaker som matrisestørrelse som overskrider VM-grensen, etc.
Liste over unntak i Java
Nedenfor er en liste over de viktigste unntakene som forekommer i Java. Vi har gitt eksempler på programmering for noen av disse unntakene. Merk at disse er innebygde unntak som støttes av Java.
# 1) Aritmetisk unntak: Aritmetiske avvik som dividerer med null resulterer i ArithmeticException.
Programmet nedenfor viser forekomsten av ArithmeticException.
class Main { public static void main(String args()) { try { //define two numbers int num1 = 100, num2 = 0; int result = num1 / num2; // divide by zero //print the result System.out.println('Result = ' + result); } catch (ArithmeticException e) { System.out.println('ArithmeticException:Division by Zero'); } } }
Produksjon
# 2) ArrayIndexOutOfBoundsException: ArrayIndexOutOfBoundsException kastes når et array-element er tilgjengelig ved hjelp av en ulovlig indeks. Indeksen som brukes er enten utenfor størrelsen på matrisen eller er negativ.
# 3) ClassNotFoundException: Hvis klassedefinisjonen ikke blir funnet, blir ClassNotFoundException hevet.
# 4) FileNotFoundException: FileNotFoundException gis når filen ikke eksisterer eller ikke åpnes.
# 5) IO-unntak: IOException kastes når inngangs- og utgangsoperasjonen mislykkes eller blir avbrutt.
# 6) InterruptedException: Når en tråd behandler eller sover eller venter, blir den avbrutt ved å kaste InterruptedException.
# 7) NoSuchFieldException: Hvis en klasse ikke inneholder et spesifisert felt eller en spesifikk variabel, kaster den NoSuchFieldException.
# 8) NoSuchMethodException: Når metoden du får tilgang til ikke blir funnet, heves NoSuchMethodException.
# 9) NullPointerException: NullPointerException heves når et null-objekt blir henvist. Dette er det viktigste og vanligste unntaket i Java.
# 10) NumberFormatException: Dette unntaket heves når en metode ikke kunne konvertere en streng til et numerisk format.
# 11) RuntimeException: Ethvert unntak som oppstår ved kjøretid er et RuntimeException.
# 12) StringIndexOutOfBoundsException: StringIndexOutOfBoundsException kastes av String-klassen og indikerer at indeksen er utenfor størrelsen på String-objektet eller er negativ.
# 13) EOFEeksepsjon: EOFException er en del av pakken java.io og kastes når slutten av filen er nådd og filen blir lest.
# 14) IllegalArgumentException: IllegalArgumentException kastes når ulovlige eller ugyldige argumenter sendes til metoden. For eksempel, feil dataformat, nullverdi når ikke-null kreves eller argumenter utenfor området.
Java-programmet nedenfor demonstrerer IllegalArgumentException.
public class Main { int m; public static void setMarks(int marks) public static void main(String() args) { setMarks(45); setMarks(101); } }
Produksjon
I det ovennevnte programmet kastes IllegalArgumentException i den andre samtalen til setMarks-funksjonen der vi legger inn merkene som er utenfor rekkevidde (> 45).
# 15) InputMismatchException: InputMismatchException kastes når inngangslesningen ikke samsvarer med et spesifisert mønster. For eksempel, Hvis programmet forventer heltall og leser en flottør, heves InputMismatchException.
# 16) NoSuchElementException: NoSuchElementException kastes når neste element du får tilgang til, ikke eksisterer.
For eksempel, i Enumeration brukes nextElement () -metoden for å få tilgang til neste element i opptellingen. Hvis elementet ikke eksisterer, kastes NoSuchElementException. For det meste kaster Java Collections dette unntaket.
Programmet nedenfor viser dette.
import java.util.*; public class Main { public static void main(String() args) { Set hash_Set = new HashSet(); //create an empty hashSet. //This throws NoSuchElementException since hashSet is empty hash_Set.iterator().next(); } }
Produksjon
beste dvd-dekryptereren for Windows 10
# 17) ConcurrentModificationException: ConcurrentModificationException kastes vanligvis av samlingsklasser. Dette unntaket blir kastet når objektene prøver å endre en ressurs samtidig.
For eksempel, en tråd kan ikke endre en samling når en annen tråd får tilgang til den. Hvis vi tillater to tråder, vil disse to samtidig få tilgang til samlingen, og det vil være uoverensstemmelser.
Følgende eksempel viser ConcurrentModificationException.
import java.awt.List; import java.util.*; public class Main { public static void main(String() args) { ArrayList A_list = new ArrayList<>(); //add elements to the ArrayList A_list.add(10); A_list.add(20); A_list.add(30); Iterator it = A_list.iterator(); while (it.hasNext()) { Integer value = it.next(); System.out.println('ArrayList Value:' + value); if (value.equals(30)) A_list.remove(value); } } }
Produksjon
I det ovennevnte programmet prøver vi å slette et element samtidig mens ArrayList skrives ut. Dette er samtidig tilgang, og dermed kastes et unntak.
Egendefinerte unntak i Java
Så langt har vi diskutert alle unntakene som er innebygd eller levert av Java-språk. Bortsett fra disse unntakene, kan vi også definere våre egne unntak. Disse kalles tilpassede unntak eller brukerdefinerte unntak.
Ved å bruke tilpassede unntak kan vi definere unntakene våre etter behov.
Følgende eksempel viser det egendefinerte unntaket som vi definerte for en heltallverdi.
//custom exception definition class InvalidValueException extends Exception{ InvalidValueException(String s){ super(s); } } class Main{ static void validate(int int_val)throws InvalidValueException{ if(int_val<10) //value is valid if> 10 else throw exception throw new InvalidValueException('Invalid value'); else System.out.println('This is valid integer'); } public static void main(String args()){ try{ validate(9); }catch(Exception m){System.out.println('Exception occured: '+m);} System.out.println('Code after Exception'); } }
Produksjon
ofte stilte spørsmål
Q # 1) Hva mener du med unntak?
Svar: En hendelse som oppstår under utførelsen av et program og forstyrrer den normale gjennomføringsflyten til programmet kalles Unntak. Unntaket er uønsket og uventet og kan oppstå på grunn av eksterne faktorer eller programmeringsfeil.
Q # 2) Hva er forskjellen mellom feil og unntak?
Svar: Unntak er hendelser som forstyrrer den normale flyt av programmet. Vi kan håndtere unntak i programmet vårt og fortsette med programmet normalt. En feil er en uopprettelig hendelse som ikke kan håndteres og avslutter programmet.
Spørsmål 3) Hva mener du med Unntakshåndtering?
Svar: Prosessen med å spesifisere trinnsekvensen i et program for å håndtere unntaket kalles Unntakshåndtering. Ved å tilby unntakshåndterere i et program, kan vi sikre normal flyt av programmet.
Sp # 4) Hva er fordelene med Exception Handling i Java?
Svar: Ved å bruke unntakshåndtering kan vi opprettholde normal gjennomføring av en applikasjon. Vi kan også overføre feilene opp i samtalestakken når vi tilbyr unntakshåndterere.
Q # 5) Hva er bruken av Unntakshåndtering?
Svar: Ikke å avslutte den vanlige gjennomføringen av en applikasjon er den viktigste bruken av å ha unntakshåndterere i et program. Uten unntakshåndterere vil programmet avsluttes og den normale gjennomføringsflyten vil bli avbrutt når et unntak oppstår.
Med unntak som er riktig håndtert i programmet, kan det fortsette med normal utførelse selv når et unntak oppstår.
anime-nettsteder for å se anime gratis
Flere eksempler på unntak
Et unntak er en hendelse som oppstår mens programmet kjører, og det forstyrrer programkjøringen. På grunn av dette slutter programvareproduktet brått.
Når dette unntaket oppstår, oppretter Java et objekt med en feilmelding og informasjon om klassen. Dette er unntaksobjektet.
Hvorfor trenger vi et unntak i Java?
Klasse ExcepDemo uten unntak:
public class ExcepDemo { public static void main(String() args) { int i=5; int j=0; System.out.println(i/j); System.out.println('statement after division'); } }
PRODUKSJON:
Class ExcepDemo med unntakshåndtering:
public class ExcepDemo { public static void main(String() args) { // TODO Auto-generated method stub int i=5; int j=0; try { System.out.println(i/j); } catch(ArithmeticException ae) { System.out.println('wrong input'); } System.out.println('statement after division'); } }
PRODUKSJON:
Prøv, fange og til slutt blokkere:
- Et unntak håndteres av try, catch block.
- Uttalelser som kan føre til unntak er skrevet inne i prøveblokken.
- Når et unntak oppstår, blir utsagnene i fangstblokken utført. Hvis det ikke oppstår et unntak, blir ikke fangstblokken utført.
- Uavhengig av unntak som skjedde eller ikke skjedde, vil den siste blokkeringen bli utført.
Unntakstyper
Ukontrollert unntak:
Som unchecked unntak kan unngås ved riktig programmering ( F.eks. nullpeker Exception, Arithmetic Exception) vil ikke ha sjekket av kompilatoren. Uhaket unntak blir kastet ved kjøretid.
Sjekket unntak:
- Kontrollert unntak blir sjekket av kompilatoren, og det er obligatorisk å kaste eller håndtere unntaket.
- Dette unntaket brukes til å skille feilhåndteringskoden fra den vanlige koden.
- Alle de sjekket unntakene er gruppert, og det er nyttig å skille mellom problemene.
Eksempel: java.io
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class DemoExpChecked { public static void main(String() args) { try { File file=new File('input.txt'); BufferedReader br = new BufferedReader(new FileReader(file)) ; String content; while ((content=br.readLine())!=null) { System.out.println(content); } br.close(); } catch(IOException e) { e.printStackTrace(); } } }
Feil
En feil kan oppstå på grunn av programlogiske feil eller noe minne relatert til JVM-problem.
Eksempel: Minne uten bundet feil eller stack overflow-feil.
Kast og kast
'Kast' nøkkelord brukes til å kaste unntaket, mens 'kaster' nøkkelordet brukes til å erklære unntaket.
Kast eksempelprogram:
public class Demothrow { String content ; public void driving(String c) { this.content=c; if (content.isEmpty()) { throw new NullPointerException('content is empty'); } else { System.out.println('content=='+content); } } public static void main(String() args) { Demothrow dt=new Demothrow(); dt.driving(''); } }
Kaster eksempelprogram:
Kast brukes for å gi informasjon om at denne metoden kaster dette spesielle unntaket. Når du kaller den spesifikke metoden, må du håndtere dette unntaket.
public class DemoThrows { int i=2,j=0; public void checkmethod () throws ArithmeticException{ System.out.println(i/j); } public static void main(String() args) { DemoThrows d =new DemoThrows(); try { d.checkmethod(); } catch (ArithmeticException ae) { ae.printStackTrace(); } } }
Viktige punkter å merke seg:
- Unntak er unormale hendelser som har skjedd under programutførelsen, og det vil påvirke utførelsesflyten.
- En feil er forskjellig fra unntak. Feil Eksempel: Minne ut av feil.
- Merkede unntak blir sjekket under kompilering, og det er obligatorisk å håndtere dette avmerkede unntaket.
- Et ukontrollert unntak oppstår i løpet av kjøretiden.
Konklusjon
Denne veiledningen om unntakshåndtering i Java introduserte definisjonen av unntak, unntakshåndtering og unntakshierarkiet i Java. Vi diskuterte også unntaksklassen i Java som gir forskjellige konstruktører og metoder for å få tilgang til unntak.
Vi utforsket en liste over vanlige unntak som forekommer i Java og så programmeringseksemplene for det viktigste unntaket. Vi diskuterte også de største feilene som oppstår i et Java-program sammen med typer unntak og tilpassede unntak.
=> Sjekk ALLE Java-opplæringsprogrammer her.
Anbefalt lesing
- Topp 10 unntak av selen og hvordan du håndterer disse (nøyaktig kode)
- JDBC Unntakshåndtering - Hvordan håndtere SQL-unntak
- Hvordan håndtere unntak i SoapUI Groovy Scripts - SoapUI Tutorial # 11
- Java String with String Buffer and String Builder Tutorial
- Java-distribusjon: Opprettelse og utføring av Java JAR-fil
- Java-tråder med metoder og livssyklus
- Java Virtual Machine: Hvordan JVM hjelper med å kjøre Java-applikasjoner
- Få tilgang til modifikatorer i Java - opplæring med eksempler