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 回答