Java 在main方法中引发异常

Java 在main方法中引发异常,java,exception,Java,Exception,我正在试图弄清楚为什么我必须在main方法中抛出异常,而我有可以处理这些异常的try/catch块? 即使我删除抛出ILLEGARGUMENTEXCEPTION、INPUTMASCHMATCHEXCEPTION部分,该程序仍将编译并正常工作 public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{ boolean flag = true; Scann

我正在试图弄清楚为什么我必须在main方法中抛出异常,而我有可以处理这些异常的
try
/
catch
块? 即使我删除
抛出ILLEGARGUMENTEXCEPTION、INPUTMASCHMATCHEXCEPTION
部分,该程序仍将编译并正常工作

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();
        } 
简单回答:

如果代码处理了所有已检查的异常,则不需要声明要抛出的方法

另见:


只有在希望由“更高”的函数处理异常时,才抛出异常

注意:异常不会在抛出时消失。它仍然需要处理。)

如果要立即处理异常,可以使用
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);
  }
}

有时,调用方不希望抛出异常,因为他们不希望处理此类异常。在这种情况下,我们使用try-catch-finally块来封装可能引发异常的代码

但是,如果您想专门捕获某个异常并尝试对其采取措施,或者如果您想向呼叫方抛出一个客户异常,那么您应该首先捕获它


建议永远不要吞咽异常,也不要捕获并重新抛出相同的异常。

基本上检查过的异常需要处理。编译器强制这样做。您可以通过try-catch或by-throws子句来实现。其中一个就足够了


当您不想通过调用代码来处理该异常时,可以采用第一种方法。

任何方法都有两种选择来处理该方法中可能出现的异常:

第一个选择是使用catch在方法中处理异常,并且不要告诉任何人。这种方法在处理错误时很有用,这对调用此函数的方法没有影响

第二种选择是捕获方法中的异常,可以执行也可以不执行某些操作来处理异常。另外,告诉调用方法出了问题,这样您就可以进行必要的操作。这种方法很有用,应该用于导致问题的异常,这些问题需要在上面传播到调用层次结构

我认为从表中抛出异常并不是一个好主意 主要方法。因为即使您不抛出它,JVM也会得到 异常并将退出。你所能做的就是抓住那些 例外情况,并在主系统内采取一些纠正措施。如果 无论您是否抛出异常,异常都是灾难性的 程序将退出


您正在使用try-catch处理代码中的异常。这就是原因。

你在海上,有人溺水。唯一的例外是你的朋友说‘哦,伙计,看那边!他快淹死了!我们应该做些什么吗?”。在你的
catch
子句中,你可以定义你的
saveTheMan()
方法。顺便说一句,如果在
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);
  }
}