java - 没有抛出条款

标签 java exception

这个程序是正确的,可以编译运行。但为什么方法 'a' 没有 throws 声明?

class Exception1 {
      public void a() 
        {
            int array[] = new int[5];
            try
            {
                System.out.println("Try");
                array[10]=1;
            }
            catch (Exception e)
            {
               System.out.println("Exception");

                throw e;
            }
            finally
            {
                System.out.println("Finally");
                return;
            }
        }
    public static void main(String[] args) 
        {
            Exception1 e1 = new Exception1();

            try {
                e1.a();
            } 
            catch(ArrayIndexOutOfBoundsException e)
            {
                System.out.println("Catch");
            }
            System.out.println("End of main");
        }
}

最佳答案

问题是 finally block 中的 return:

因为 finally总是被执行并且它会总是突然完成(有一个未经检查的异常或有一个返回),catch block 中的 throw e 是不可能的(或者 try block 中的任何未经检查的异常)可以在调用堆栈上向下传播。

如果您删除 return,您会注意到编译器将不会接受该代码,声明 Exception 未声明为在方法上抛出 a()

关于java - 没有抛出条款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961227/

相关文章:

Java 线程 Ping Pong 示例问题

java - 向 Jpanel 添加多个组件

java - 如何在 Java 中使用准备好的语句进行选择查询?

Java二维数组仅按预期工作第一行

java - 将字母数字字符串转换为数字 - NumberFormatException

java - 尝试使用 input.nextLine() 用用户输入(字符串)填充数组,但打印输出两次并且第一次不要求输入

c# - 通过多个嵌套异步调用调试异常

asp.net-mvc - JavaScriptSerializer 期间 ASP.NET MVC 中的 MaxJsonLength 异常

c++ - 在模板中捕获异常类

c++ - 抛出 'std::string' 实例后调用终止