是否可以忽略异常?

2022-09-01 12:35:38

在Java中,是否可以创建一个具有不被检查的语句的方法。throws

例如:

public class TestClass {
    public static void throwAnException() throws Exception {
        throw new Exception();
    }
    public static void makeNullPointer() {
        Object o = null;
        o.equals(0);//NullPointerException
    }
    public static void exceptionTest() {
        makeNullPointer(); //The compiler allows me not to check this
        throwAnException(); //I'm forced to handle the exception, but I don't want to
    }
}

答案 1

你可以尝试什么都不做:

public static void exceptionTest() {
    makeNullPointer(); //The compiler allows me not to check this
    try {
        throwAnException(); //I'm forced to handle the exception, but I don't want to
    } catch (Exception e) { /* do nothing */ }
}

请记住,在现实生活中,这是非常不明智的。这可以隐藏一个错误,让你搜索狗整整一周,而问题真的是一只猫(ch)。 (来吧,至少放一个System.err.println() - 日志记录是这里的最佳实践,正如@BaileyS所建议的那样。

Java 中未经检查的异常扩展了该类。抛出它们不会要求他们的客户:RuntimeExceptioncatch

// notice there's no "throws RuntimeException" at the signature of this method
public static void someMethodThatThrowsRuntimeException() /* no need for throws here */ {
    throw new RuntimeException();
}

扩展的类也不需要声明。RuntimeExceptionthrows

甲骨文对此说了一句话

底线准则是:如果可以合理地期望客户端从异常中恢复,请将其设置为已检查的异常。如果客户机无法执行任何操作来从异常中恢复,请将其设置为未选中的异常。


答案 2

你可以做3件事:

  • 抛出一个(或扩展一个,如,,...的东西),你不必捕捉这些,因为它们是未经检查的异常。RuntimeExceptionRuntimeExceptionNullPointerExceptionIllegalArgumentException

  • 捕获异常而不执行任何操作(不推荐):

    public static void exceptionTest() {
        makeNullPointer(); //The compiler allows me not to check this
        try {
            throwAnException(); //I'm forced to handle the exception, but I don't want to
        } catch (Exception e) {
            // Do nothing
        }
    }
    
  • 更改声明,说它抛出一个 ,并让调用它的方法捕获并做适当的事情:exceptionTest ()ExceptionException

    public static void exceptionTest() throws Exception {
        makeNullPointer(); //The compiler allows me not to check this
        throwAnException(); //I'm no more forced to handle the exception
    }
    

推荐