当 main 方法引发异常时,这意味着什么?

2022-09-01 07:43:40

我正在复习我为准备明天早上的期末考试而做的期中考试。我答错了这个问题,但没有指出正确的答案,我忽略了向教授询问这个问题。

请考虑以下代码段:

public static void main(String[] args) throws FileNotFoundException

以下关于此代码的哪些语句是正确的?

  1. main 方法旨在捕获和处理所有类型的异常。
  2. 主要方法设计用于捕获和处理 .FileNotFoundException
  3. 如果发生这种情况,main 方法应直接终止。FileNotFoundException
  4. 如果发生任何异常,main 方法应直接终止。

我选择了第二种选择。


答案 1

答案是4号,

4.- 如果发生任何异常,main 方法应直接终止。

throws 子句仅声明该方法引发一个选中的 FileNotFoundException,并且调用方法应捕获或重新抛出它。如果在 main 方法中抛出(而不是 catch)未选中的异常,则该异常也将终止。

检查此测试:

public class ExceptionThrownTest {

    @Test
    public void testingExceptions() {

        try {
            ExceptionThrownTest.main(new String[] {});
        } catch (Throwable e) {
            assertTrue(e instanceof RuntimeException);
        }

    }

    public static void main(String[] args) throws FileNotFoundException {

        dangerousMethod();

        // Won't be executed because RuntimeException thrown
        unreachableMethod();

    }

    private static void dangerousMethod() {
        throw new RuntimeException();
    }

    private static void unreachableMethod() {
        System.out.println("Won't execute");
    }
}

如您所见,如果我抛出一个,即使抛出的异常不是RuntimeExceptionFileNotFoundException


答案 2

伙计,有点晚了,但答案是3号。

数字 1 是 false,因为它没有处理 FileNotFoundException

出于同样的原因,数字2是错误的。

数字 3 是正确的。如果抛出 FileNotFoundException,则 main 方法将终止。

数字 4 是错误的。如果出现任何异常,它不会终止。只有在发生未经检查的异常或 FileNotFoundException 时,它才会终止。如果在 'throws' 子句中没有声明其他已检查的异常,则意味着正在该方法中处理这些异常。