Java捕获不同的异常 公共类异常处理程序{ 公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{ //在这里编写代码 试一试{ 测试异常(-5); 测试异常(11); }catch(filenotfounde异常){ System.out.println(“未找到文件”); }捕获(IOE异常){ System.out.println(“发生IO错误”); }finally{//finally块总是在try块退出时执行。 System.out.println(“释放资源”); 测试异常(15); } } publicstaticvoidtestexception(inti)抛出FileNotFoundException、IOException{ if(i10){ 抛出新IOException(); } } }
此代码的输出给出Java捕获不同的异常 公共类异常处理程序{ 公共静态void main(字符串[]args)抛出FileNotFoundException、IOException{ //在这里编写代码 试一试{ 测试异常(-5); 测试异常(11); }catch(filenotfounde异常){ System.out.println(“未找到文件”); }捕获(IOE异常){ System.out.println(“发生IO错误”); }finally{//finally块总是在try块退出时执行。 System.out.println(“释放资源”); 测试异常(15); } } publicstaticvoidtestexception(inti)抛出FileNotFoundException、IOException{ if(i10){ 抛出新IOException(); } } },java,Java,此代码的输出给出 找不到文件 释放资源 是否可以让java捕获IOException和FileNotFoundException?它似乎只能捕获第一个异常,而不能捕获IOException在抛出第一个异常时,try块停止,因此,testException()的第二次调用永远不会执行。您应该将您的try/catch/finally块放在另一个try/catch块中,因为您的finally块可以抛出必须捕获的异常 下面是代码的工作原理: testException(-5)抛出一个FileNotFo
找不到文件
释放资源
是否可以让java捕获IOException和FileNotFoundException?它似乎只能捕获第一个异常,而不能捕获IOException在抛出第一个异常时,
try
块停止,因此,testException()的第二次调用
永远不会执行。您应该将您的try/catch/finally
块放在另一个try/catch
块中,因为您的finally
块可以抛出必须捕获的异常
下面是代码的工作原理:
抛出一个testException(-5)
FileNotFoundException
被FileNotFoundException
catch(FileNotFoundException e)
打印到标准输出中未找到文件
- 然后执行
块(不执行最后
语句)testException(10)
- 因此,
被打印出来发布资源
- 执行
时抛出一个无论如何都不会被捕获的testException(15)
(程序将被中断)IOException
如果从
main
方法中删除throws-FileNotFoundException,IOException
,编译器将提醒您未捕获异常(最后块中的异常)。这是可能的,但不是那样。您必须将第一个try/catch嵌套在另一个try块中,并从嵌套的catch块中重新调用FileNotFoundException。但你为什么要这么做?如果你想要的话,在两个catch块中做同样的事情。首先“testException(10);”行永远不要按照你的代码执行这是一个复杂的代码示例,它包含了几个不像看起来那么容易看到的条件。我猜执行它将在标准输出中显示未捕获的异常(您应该在问题中显示)。查看我的答案以了解发生了什么。对testException()的第二个调用实际上是testException(15)代码>并且它实际上正在被执行(请参阅我的答案中的解释)。我指的是try
块中的第二个。我知道,但是调用testException不会抛出IOException(因为10不是>10
)。这不是Eneres的问题。你说的没错,但这也是问题所在,因为即使第二次调用满足抛出FileNotFoundException
的条件,它也不会被调用,因为try块中第一次调用抛出了异常。这取决于程序员的意图。希望他能向我们解释:)
public class ExceptionHandler {
public static void main(String[] args) throws FileNotFoundException, IOException {
// write your code here
try {
testException(-5);
testException(11);
} catch (FileNotFoundException e){
System.out.println("No File Found");
} catch (IOException e){
System.out.println("IO Error occurred");
} finally { //The finally block always executes when the try block exits.
System.out.println("Releasing resources");
testException(15);
}
}
public static void testException(int i) throws FileNotFoundException, IOException {
if (i < 0) {
FileNotFoundException myException = new FileNotFoundException();
throw myException;
}
else if (i > 10) {
throw new IOException();
}
}
}