チェックされた対のより良い理解。 未チェックの例外– Javaで例外をより適切に処理する方法は?
公開: 2014-09-15チェックされた例外
Javaプログラミング言語でチェックされた例外とは何ですか。 簡単な言葉で:コンパイル時にチェックされる例外は、チェックされた例外と呼ばれます。 これらのいくつかを以下に示します。 コード内で、メソッドの一部がchecked exception
をスローした場合、 次に、メソッドhandle the exception
か、 throws
キーワードを使用して例外を指定する必要があります。
- IOException
- SQLException
- DataAccessException
- ClassNotFoundException
- InvocationTargetException
- MalformedURLException
例を見てみましょう:
以下の例では、サイト「Crunchify.com」のコンテンツを取得してコンソールに印刷します。 この操作中、Javaプログラムは下の強調表示された行でMalformedURLException
またはIOException
をスローします。
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 ( ) ; } } |
これを解決するには2つの方法があります。 Add throws clause
を追加するか、コードにTry Add Try, Catch block
を追加して解決します。 これが更新されたコードです。
- 16行目と20行目を変更し、
throws IOException
を追加します - 26、42、43にtrycatchブロックを追加
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 ( ) ; } } |

チェックされていない例外
Javaでチェックされていない例外は、 NOT verified during Compile time
例外です。 これらの例外は、プログラミングが不適切なために発生します。
プログラムはコンパイルエラーを出しません。
チェックされていないすべての例外は、 RuntimeException
クラスの直接のサブクラスです。
Simple Example
:ユーザー入力を受け入れるオンラインフォームを作成しました。 フリーテキスト形式です。 電子メールフィールド、ユーザー名フィールド、または電話番号フィールドの場合、使用すると間違った値を入力する可能性があります。
クライアント側で検証がない場合は、本番環境でアプリケーションを実行しているときにランタイム検証例外が発生する可能性が高くなります。 DB操作またはフィールドをある形式から別の形式に変換することによってエラーがスローされる場合があります。
以下は、チェックされていない例外のタイプです。
- NullPointerException
- ArrayIndexOutOfBound
- IllegalArgumentException
- IllegalStateException
私を最も悩ませているのはNullPointerExceptionです。 先週、NPEに関する詳細な記事を書きました。
NPEを回避するために提供される合計8つの異なるヒントがあります。
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 ) ; } } } |
Java 7では、単一のCatch block
で複数の例外を処理できました。 13行目を上から下に変更できます。
1 |
} catch ( ArrayIndexOutOfBoundsException | NumberFormatException e ) { |
要約すると、チェックされた例外とチェックされていない例外の両方が、キーワードtry, catch
、 finally
を使用して処理されます。
機能チェックとチェックなしの例外に関しては同じです。