我想弄清楚为什么我必须在主方法中遇到throw
异常,而我有try
/ catch
块可以处理这些异常?
即使我删除throws IllegalArgumentException,InputMismatchException
部分,该程序仍然可以编译并完美地工作。
public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{
boolean flag = true;
Scanner in = new Scanner(System.in);
do{
try{
System.out.println("Please enter the number:");
int n = in.nextInt();
int sum = range(n);
System.out.println("sum = " + sum);
flag = false;
}
catch(IllegalArgumentException e){
System.out.println(e.getMessage());
}
catch(InputMismatchException e){
System.out.println("The number has to be as integer...");
in.nextLine();
}
答案 0 :(得分:9)
如果您希望它由“更高”的功能处理,您只会抛出异常。
( 注意: 异常不会在抛出时消失。它仍然需要处理。)
public void functionA() throws Exception{
throw new Exception("This exception is going to be handled elsewhere");
}
如果要立即处理异常,请使用try/catch
块。
public void functionB(){
try{
throw new Exception("This exception is handled here.");
}catch(Exception e){
System.err.println("Exception caught: "+e);
}
}
如果您已经使用try/catch
块来捕获异常,那么您无需再将该异常抛出。
public void functionC() throws Exception{
try{
throw new Exception("This exception doesn't know where to go.");
}catch(Exception e){
System.err.println("Exception caught: "+e);
}
}
答案 1 :(得分:3)
任何方法都有两种选择来处理该方法中可能发生的异常:
首选是使用catch处理方法中的异常,不要告诉任何人。这种方法在处理错误时很有用,这对调用它的方法没有影响。
第二种选择是捕获方法中的异常,可能会也可能不会处理异常。另外告诉调用方法出了问题,所以你需要做。这种方法很有用,应该用于导致需要在上面传播到调用层次结构的问题的异常。
我认为从中抛出异常并不是一个好主意 主要方法。因为即使你不扔它,JVM也会得到它 例外并将退出。你能做的最好的就是抓住那些 除外,并在主要内部采取一些纠正措施。如果 无论你是否投掷,例外都是灾难性的 程序将退出。
答案 2 :(得分:2)
答案 3 :(得分:1)
有时主叫方不希望抛出异常,因为他们不想处理此类异常。在这种情况下,我们将使用try catch finally块抛出异常的代码包含在内。
但是,如果您想要专门捕获某个异常并尝试对其进行某些操作,或者您想要向主叫方抛出客户异常,那么您应该首先捕获它。
建议永远不要吞下异常,也不要捕获并重新抛出相同的异常。
答案 4 :(得分:0)
基本上需要处理检查的异常。编译器力量这样做。你可以通过try catch或throws子句来做到这一点。其中一个就足够了。
当您不想通过调用代码来处理该异常时,您将采用第一种方法。
答案 5 :(得分:0)
您正在使用try-catch在代码中处理异常。这就是原因。