logo

Markerade vs omarkerade undantag i Java

I Java, undantag är en oönskad eller oväntad händelse, som inträffar under körningen av ett program, d.v.s. vid körning, som stör det normala flödet av programmets instruktioner.

I Java finns det två typer av undantag:

  1. Markerade undantag
  2. Omarkerade undantag

Java kontrollerat vs omarkerade undantag



Markerade undantag i Java

Dessa är de undantag som kontrolleras vid kompilering. Om någon kod inom en metod ger ett markerat undantag, måste metoden antingen hantera undantaget eller så måste den ange undantaget med hjälp av kastar nyckelord . I markerade undantag finns det två typer: helt kontrollerade och delvis markerade undantag. Ett fullständigt kontrollerat undantag är ett kontrollerat undantag där alla dess underordnade klasser också kontrolleras, som IOException och InterruptedException. Ett delvis markerat undantag är ett markerat undantag där några av dess underordnade klasser är avmarkerade, som ett undantag.

Tänk till exempel på följande Java-program som öppnar filen på plats C: esta.txt och skriver ut de tre första raderna av den. Programmet kompilerar inte, eftersom funktionen main() använder FileReader(), och FileReader() kastar ett markerat undantag FileNotFoundException . Den använder också metoderna readLine() och close(), och dessa metoder kastar också markerat undantag IOException

Exempel:

Java




// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException occurred> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Reading file from path in local directory> >FileReader file =>new> FileReader(>'C: esta.txt'>);> >// Creating object as one of ways of taking input> >BufferedReader fileInput =>new> BufferedReader(file);> >// Printing first 3 lines of file 'C: esta.txt'> >for> (>int> counter =>0>; counter <>3>; counter++)> >System.out.println(fileInput.readLine());> >// Closing file connections> >// using close() method> >fileInput.close();> >}> }>

>

>

Produktion:

Utdata från undantaget Java Checked

För att fixa programmet ovan måste vi antingen ange en lista över undantag med hjälp av kast, eller så måste vi använda ett försök-fångst-block. Vi har använt kast i programmet nedan. Eftersom FileNotFoundException är en underklass av IOException , vi kan bara specificera IOException i kastlistan och gör ovanstående program kompilatorfelfritt.

Exempel:

Java




// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException does not occur> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >throws> IOException> >{> >// Creating a file and reading from local repository> >FileReader file =>new> FileReader(>'C: esta.txt'>);> >// Reading content inside a file> >BufferedReader fileInput =>new> BufferedReader(file);> >// Printing first 3 lines of file 'C: esta.txt'> >for> (>int> counter =>0>; counter <>3>; counter++)> >System.out.println(fileInput.readLine());> >// Closing all file connections> >// using close() method> >// Good practice to avoid any memory leakage> >fileInput.close();> >}> }>

>

>

Produktion:

First three lines of file 'C:	esta.txt'>

Omarkerade undantag i Java

Detta är undantagen som inte kontrolleras vid kompilering. I C++ är alla undantag avmarkerade, så det tvingas inte av kompilatorn att varken hantera eller specificera undantaget. Det är upp till programmerarna att vara civiliserade och specificera eller fånga undantagen. I Java, undantag under Fel och RuntimeException klasser är okontrollerade undantag, allt annat under throwable är markerat.

Tänk på följande Java-program. Det kompilerar bra, men det kastar ArithmeticException när man springer. Kompilatorn låter den kompilera eftersom ArithmeticException är ett okontrollerat undantag.

Exempel:

Java




// Java Program to Illustrate Un-checked Exceptions> // Main class> class> GFG {> >// Main driver method> >public> static> void> main(String args[])> >{> >// Here we are dividing by 0> >// which will not be caught at compile time> >// as there is no mistake but caught at runtime> >// because it is mathematically incorrect> >int> x =>0>;> >int> y =>10>;> >int> z = y / x;> >}> }>

>

>

Produktion

Exception in thread 'main' java.lang.ArithmeticException: / by zero at Main.main(Main.java:5) Java Result: 1>

Kort sagt är omarkerade undantag runtime-undantag som inte krävs för att fångas eller deklareras i en throws-klausul. Dessa undantag orsakas vanligtvis av programmeringsfel, som att försöka komma åt ett index utanför gränserna i en array eller försöka dividera med noll.

java giltiga identifierare

Omarkerade undantag inkluderar alla underklasser av klassen RuntimeException, såväl som klassen Error och dess underklasser.

Här är några exempel på omarkerade undantag i Java:

1. ArrayIndexOutOfBoundsException: Detta undantag skapas när du försöker komma åt ett arrayindex som är utanför gränserna.
2. NullPointerException: Detta undantag skapas när du försöker komma åt en nollobjektreferens.
3. Aritmetiskt undantag: Detta undantag skapas när du försöker dividera med noll eller utföra en ogiltig aritmetisk operation.