我知道这样的问题无处不在,但我读了很多关于此事的内容,我仍然无法理解“throws”命令的作用。我现在会更具体:
所以,我看到的一个例子是this one,其代码如下:
public class CatchThrow {
private static void throwsMethod() throws NumberFormatException {
String intNumber = "5A";
Integer.parseInt(intNumber);
}
private static void catchMethod() {
try {
throwsMethod();
} catch (NumberFormatException e) {
System.out.println("Convertion Error");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
catchMethod();
}
}
现在,如果我从“throwsMethod”方法中删除“throws NumberFormatException”,程序将运行相同的操作,并将给出相同的结果。实际上,我看到的每个带有throws命令的例子都是一样的,所以我真的不明白为什么要使用它。
我正在使用Eclipse IDE,版本4.7.2。
答案 0 :(得分:0)
通常,函数会在函数或return语句的末尾退出。
但是,函数在到达throw
语句时也可以退出。如果异常子类Exception
,则函数的调用者必须使用try { } catch { }
块包围函数调用。如果异常子类RuntimeException
你可以选择在try catch块中包围函数调用。
如果你看一下NumberFormatException
的JavaDoc:https://docs.oracle.com/javase/7/docs/api/java/lang/NumberFormatException.html会看到它的子类RuntimeException
。这意味着您的try-catch块是可选的。两个程序之间的区别在于:使用try-catch块,您将获得Convertion Error
打印到控制台,没有它,您将看到完整的堆栈跟踪。这通常被称为"吞下例外"。
答案 1 :(得分:0)
所以基本上,如果发生异常并且您不想在那里处理该异常,那么在这种情况下,您使用'throw'关键字只是在发生异常时抛出异常。
示例:这里,在throwsMethod()中,您没有处理异常处理,即不使用try(),catch()块,如果发生任何异常,您只是抛出它。如果throwsMethod()中发生异常,您将进入catch()块。
为了更好的想法,你应该阅读已检查的& Java中的未解决的异常。对于Checked异常(在编译时发生),我们使用'throw'关键字,对于Unchecked(运行时),我们使用try()catch()。
示例:NumberFormatException是一个未经检查的异常,IOException是一个Checked异常。
阅读本文以供参考:https://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/