Besseres Verständnis von Checked Vs. Ungeprüfte Ausnahmen – Wie behandelt man Ausnahmen besser in Java?
Veröffentlicht: 2014-09-15Geprüfte Ausnahme
Was ist eine geprüfte Ausnahme in der Java-Programmiersprache. In einfacher Sprache: Ausnahmen, die zur Kompilierzeit überprüft werden, werden Checked Exception genannt. Einige davon werden unten erwähnt. Wenn in Ihrem Code eine Methode eine checked exception
, dann muss die Methode entweder handle the exception
oder die Ausnahme mit dem throws
Schlüsselwort angeben.
- IOException
- SQLException
- DataAccessException
- ClassNotFoundException
- InvocationTargetException
- Fehlerhafte URL-Ausnahme
Schauen wir uns ein Beispiel an:
Im folgenden Beispiel werden wir den Inhalt der Website „Crunchify.com“ abrufen und in der Konsole drucken. Während dieses Vorgangs löst das Java-Programm MalformedURLException
oder IOException
in den unten hervorgehobenen Zeilen aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } in . close ( ) ; return sb . toString ( ) ; } } |
Es gibt zwei Möglichkeiten, dies zu lösen. Add throws clause
hinzu ODER Add Try, Catch block
zu deinem Code hinzu, um es zu lösen. Hier ist ein aktualisierter Code.
- Ändern Sie die Zeilen 16 und 20 und fügen
throws IOException
hinzu - Try-Catch-Block auf 26,42,43 hinzufügen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package com . crunchify . tutorial ; import java . io . BufferedReader ; import java . io . IOException ; import java . io . InputStreamReader ; import java . net . URL ; import java . net . URLConnection ; import java . nio . charset . Charset ; /** * @author Crunchify.com * */ public class CrunchifyCheckedException { public static void main ( String [ ] args ) throws IOException { System . out . println ( "\nOutput: \n" + callCrunchifyURL ( "https://crunchify.com" ) ) ; } public static String callCrunchifyURL ( String myURL ) throws IOException { System . out . println ( "Requested URL:" + myURL ) ; StringBuilder sb = new StringBuilder ( ) ; URLConnection urlConn = null ; InputStreamReader in = null ; try { URL url = new URL ( myURL ) ; urlConn = url . openConnection ( ) ; if ( urlConn ! = null ) urlConn . setReadTimeout ( 60 * 1000 ) ; if ( urlConn ! = null && urlConn.getInputStream() != null) { in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset()); BufferedReader bufferedReader = new BufferedReader ( in ) ; if ( bufferedReader ! = null ) { int cp ; while ( ( cp = bufferedReader . read ( ) ) ! = - 1 ) { sb . append ( ( char ) cp ) ; } bufferedReader . close ( ) ; } } } catch ( IOException e ) { // TODO: Consume and Throw an error with detailed message. } in . close ( ) ; return sb . toString ( ) ; } } |

Ungeprüfte Ausnahme
Ungeprüfte Ausnahmen in Java sind solche Ausnahmen, deren Behandlung NOT verified during Compile time
. Diese Ausnahmen treten aufgrund einer fehlerhaften Programmierung auf.
Das Programm gibt keinen Kompilierungsfehler aus.
Alle ungeprüften Ausnahmen sind direkte Unterklassen der RuntimeException
-Klasse.
Simple Example
: Sie haben ein Online-Formular erstellt, das Benutzereingaben akzeptiert. Es ist eine freie Textform. Der Benutzer kann im Falle des E-Mail-Felds, des Benutzernamensfelds ODER des Telefonnummernfelds einen falschen Wert eingeben.
Wenn Sie keine Validierung auf der Clientseite haben, gibt es mehr Möglichkeiten, eine Laufzeitvalidierungsausnahme zu erhalten, während die Anwendung in der Produktion ausgeführt wird. Fehler kann durch DB-Operation oder Konvertieren von Feldern von einem Format in ein anderes ausgelöst werden.
Nachfolgend sind Arten von ungeprüften Ausnahmen aufgeführt:
- NullPointerException
- ArrayIndexOutOfBound
- IllegalArgumentException
- Illegale staatliche Ausnahme
Am meisten ärgert mich die NullPointer Exception. Ich habe letzte Woche einen ausführlichen Artikel über NPE geschrieben.
Es gibt insgesamt 8 verschiedene Tipps zur Vermeidung von NPE.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com . crunchify . tutorial ; /** * @author Crunchify.com */ public class CrunchifyUncheckedException { public static void main ( String args [ ] ) { String crunchifyArr [ ] = { "Crunchify" , "Google" , "Yahoo" , "Amazon" , "eBay" } ; try { String myString = crunchifyArr [ 7 ] ; // This throws ArrayIndexOutOfBoundException System . out . println ( myString ) ; } catch ( ArrayIndexOutOfBoundsException e ) { System . out . println ( "ArrayIndexOutOfBoundException appears here. Better handle it in code above :)" + e ) ; } } } |
In Java 7 konnten Sie mehrere Ausnahmen in einem einzigen Catch block
behandeln. Sie könnten Zeile 13 von der oberen Zeile in die untere ändern.
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
Zusammenfassend werden sowohl aktivierte als auch nicht aktivierte Ausnahmen mit den Schlüsselwörtern try, catch
und finally
behandelt.
In Bezug auf die Funktionalität sind geprüfte und ungeprüfte Ausnahmen gleich.