1

私が理解しているように、catch ブロックで例外を処理したにもかかわらず、次のコードで未処理の例外タイプのエラーが発生します。

class NewException extends Exception{
private String msg;
public NewException(String msg){
    this.msg = msg;
}
public String getExceptionMsg(){
    return msg;
}}
class CatchException {
public static void method () throws NewException{
    try {
        throw new NewException("New exception thrown");
    }
    catch (NewException e){
        e.printStackTrace();
        System.out.println(e.getExceptionMsg());
    }
    finally {
        System.out.println("In finally");
    }
}}
public class TestExceptions{
public static void main(String[] args){
    CatchException.method();
}}
4

1 に答える 1

3

あなたmethod()はそれがスローすることを宣言しNewExceptionます。そのメソッド内にあるものは何でも無関係です:

public static void method () throws NewException{
    //...
}}

public static void main(String[] args){
    CatchException.method();
}}

コンパイラは、あなたが呼び出していることCatchException.method()main()およびそれを何らかの方法で処理していないことを認識します (キャッチまたはmain()スローNewExceptionの宣言のいずれか)。したがって、エラー.

コンパイラは、実際にその例外をスローしているかどうかを気にしません。見てくださいByteArrayInputStream.close()-それがスローされる方法はありませんIOException-しかし、宣言されているため、まだ処理する必要があります。

于 2012-10-16T20:38:38.450 に答える