为什么在使用 try 块时必须在方法签名后附加 throws Exception?

下面是我肯定误解的事情。


扔前;导致未报告的异常错误。


它要求它必须被捕获或声明......但它正在 try 块中被捕获!


为什么编译器需要在方法签名中显式抛出异常?所需方法签名:


private static void div(int i, int j) throws Exception 

代码:


   public class Exam {

        private static void div(int i, int j) {

            try {

                System.out.println(i / j);

            } catch(ArithmeticException e) {

                Exception ex = new Exception(e);

                throw ex;

            }

        }

        public static void main(String[] args) {

            try {

                div(5, 0);

            } catch(Exception e) {

                System.out.println("END");

            }

        }

    }


慕妹3146593
浏览 83回答 2
2回答

牛魔王的故事

顺便说一句,正确的方法是ArithmeticException在需要时允许结束程序。   public class Exam {        private static void div(int i, int j) throws ArithmeticException {           System.out.println(i / j);        }        public static void main(String[] args) throws Exception {           div(5, 0);        }    }更加干净和清晰,异常提供了重要的调试信息,您需要这些信息来查找运行时错误。我认为要捕获第二个异常,您需要做的就是嵌套try. 您可以有多个catch相同的对象try,但它们都只能捕获一个异常,它们不会级联或按顺序运行。要捕获由 a 引发的异常,catch您需要另一个try块。    private static void div(int i, int j) {      try {   // NESTED HERE        try {            System.out.println(i / j);        } catch(ArithmeticException e) {            Exception ex = new Exception(e);            throw ex;        }      // THIS GOES WITH THE OUTER NESTED 'try'      } catch( Exception x ) {         System.out.println( "Caught a second exception: " + x );      }    }但同样,你不应该这样做。允许抛出原始异常是更好的选择。

波斯汪

我的结论:此catch 语句处理一个异常:try{    stuff}catch(OnlyThisException ex){    throw ex;   //CHECKED EXCEPTION}此catch 语句也仅处理一个异常,而另一个则未处理:try{    stuff}catch(OnlyThisException ex){    Exception ex = new Exception(e);  //UNCHECKED! Needs catch block    throw ex;   //CHECKED EXCEPTION}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java