2016-11-20 32 views
0

キャッチ例外は

try { 
    ... 
} catch (Nullpointerexception e) { ... } 
} catch (Exception e) { ... } 

try { 
    ... 
} catch (Exception e) { ... } 

の違いは何ですが、私は1が最高であるNullPointerExceptionを、持っていると仮定しますか?なぜ?

+0

'Exception'は非常に一般的で、' NullPointerException'は属性を取得したりメソッドにアクセスしようとしている 'null'オブジェクトに固有のものです。あなたの特定の例外( 'NullPointerException'の場合)を' catch 'した方が良いでしょう。さもなければ、一般的な例外をキャッチするときに修正すべきいくつかの問題をコード内に隠すかもしれません。 – Tom

答えて

2

Q:catch(Nullpointerexception e)catch(Exception e)の違いは何ですか?

A:前者は固有で後者は一般的です。

特定のクラスの例外(「NullPointerException」など)を一方向で処理したいが、異なるクラスの例外(「IOException」など)を異なる方法で処理したい場合があります。

一般に、「すべてを処理する」ではなく、「最も狭い」例外を処理することを選択する必要があります。

"NullPointerException"(および "ArrayIndexOutOfBound")と他の多くの例外との別の大きな違いは、NullPointerExceptionがunchecked例外であることです。

注は、あまりにも、それは、Java 7で、あなたは同じcatchブロックで複数の異なる例外をキャッチする方法:今

Catching Multiple Exceptions in Java 7

// Pre-Java 7 code: 
try { 

    // execute code that may throw 1 of the 3 exceptions below. 

} catch(SQLException e) { 
    logger.log(e); 

} catch(IOException e) { 
    logger.log(e); 

} catch(Exception e) { 
    logger.severe(e); 
} 

しかし...

// Java 7 and higher 
try { 

    // execute code that may throw 1 of the 3 exceptions below. 

} catch(SQLException | IOException e) { 
    logger.log(e); 

} catch(Exception e) { 
    logger.severe(e); 
} 
1

あなたをExceptionを処理するコードが常に同じ場合は2番目のオプションを使用し、異なるExceptionの異なる動作を行う場合は最初のオプションを使用する必要があります。

NullPointerExceptionのcatch節が必要になることは非常にまれです。コード内でヌルチェックを避けることができます(実際には、NullPointerExceptionがコードで生成されている場合にのみcatch節が必要ですたとえば、図書館の内部では制御できません。 Javaの7から始まっ

、あなたも行うことができます。

try { 
    ... 
} catch (NullPointerException | AnotherException e) { 
    ... 
} 

を異なるExceptionクラスに同じボディを複製避けるために。

Java 7以前では、メソッドにハンドリングコードExceptionを含め、複写を避けるために複数のcatch句からifを呼び出す必要がありました。