Java中的捕获与抛出异常

Kem*_*abe 7 java exception try-catch throws

所以我一般有两个关于java的一般性问题.第一个是在方法体中何时使用try/catch而在声明方法时使用throws异常?这是我的意思的一点演示.这个:

public void whileChatting() throws IOException{}
Run Code Online (Sandbox Code Playgroud)

public void closeConnection() {
    try {
    } catch (IOException ioException) {
        ioException.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我的第二个问题是什么时候才能知道捕获或抛出什么类型的异常?我的意思是IOException或EOFException等异常......

如果有一个很好的联系,有人可以让我教这一切(因为它可能比我想的更复杂)我会像你回答的那样感激.谢谢.

Tre*_*don 8

抛出例外

在你的第一个例子中,

public void whileChatting() throws IOException{}
Run Code Online (Sandbox Code Playgroud)

意味着它只会将异常抛出到调用函数的任何东西.然后可以在使用try-catch块调用该方法时捕获它.如

try{
    whileChatting();
}
catch(IOException e){
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

抛出一个方法基本上将它传播到链中,因此调用此方法的任何方法都需要包含throws IOException,或者异常将需要在更高级别的方法中处理(通常通过try-catch块).

捕捉异常

捕获异常是一种优雅处理异常的方法.常见的事情是e.printStackTrace();将错误的详细信息打印到控制台,但并不总是必要的.有时你可能想做一个System.exit(0)甚至一个System.out.println("Error in method whileCalling()")

使用catch块,您可以捕获任何类型的异常!你也可以做一个try-catch-finally块,它将运行try块中的代码,捕获任何异常,以及是否捕获了任何异常,它将进入finally块并运行该代码.

要了解可能需要捕获的异常,可以查看可能引发异常的类的Javadoc.在那里,你会找到一个班级可以抛出的每一件事的清单.你也可以抓住Exception哪个会捕捉到任何可以想到的异常!(好吧,授予它扩展Exception)

最后你可以将catch块链接在一起.

try{
    whileCalling();
}
catch(IOException e){
    //handle this situation
}
catch(FileNotFoundException e){
    //handle this situation
}
catch(Exception e){
    //handle this situation
}
Run Code Online (Sandbox Code Playgroud)

这将工作就像和其他 - 如果阻止而不是捕获重复.

所以基本上回答你的问题:

1: To throwException意味着让其他人处理它,无论这是另一个类,另一种方法,还是只是希望它不会发生,否则你的程序会崩溃(非常糟糕的做法).

2:使用try catch块实际上是处理Exception但是你觉得合适!打印出堆栈跟踪以进行调试或为用户提供重新输入内容的新提示.(例如,提示用户需要输入文件位置然后抛出一个FileNotFoundException)

希望有所帮助!


pau*_*sm4 6

两个很好的经验法则:

没有一成不变的答案。

一般来说,与自定义“try/catch”相比,您可能会更频繁地使用“throws”。仅仅因为您将拥有相对较少的“知道如何恢复”的“决策”模块,但您将拥有相应的“许多”可能引发异常的模块。