急急急 java 有关try catch

来源:百度知道 编辑:UC知道 时间:2024/06/04 10:07:30
public class A {
public static void main(String [] arts){
try{
System.out.print("A ");
int valeur=Integer.parseInt("14a");
System.out.print("B");
}
catch(NumberFormatException ex){
System.out.print("C");
return;
}
finally{
System.out.print("D");
}
System.out.print("E");
}

}
最后输出 A CD 我想问的是 为什么E 没有输出 还有为什么A和 C之间有个空格呢 谢谢 拜托回答

你自己在A后面打了一个空格啊
我来慢慢解释你的程序

首先执行了System.out.print("A ");这没错

当程序到了int valeur=Integer.parseInt("14a"); 就出现Exception了
所以System.out.print("B"); 不会执行

而是到了catch块里面 所以执行了System.out.print("C");

至于finally意思是不管程序出不出现Exception都会执行到这里来
所以程序执行了System.out.print("D");

至于System.out.print("E"); 是在try catch finally之外当程序碰到return下面的语句就不会执行了

这里有个细节就是
finally是会在return之前执行

面试很喜欢考这个问题。好多学了java几年的都被这个问题考到了

在try catch finally结构中,使用了return语句强制返回的话,程序就不再往下执行,但finally块中语句的还得执行了,而且但除了finally外的其它语句将不再被执行。
至于空格问题
System.out.print("A ");
你这里不是有个空格吗?

无论异常是否被捕获,finally中的代码都会被执行。
使用了return,如果没有finally包含着println(“d”)一句,D也不会被打印,所以E没有被打印。但如果没有return一句,就会打印E了。
try 中的语句没有出现异常,finally 中的语句会被执行,try 语句以后的语句也会被执行。
如果try中有一个语句引起异常,并被catch子句捕获,就会跳过try中的其他语句,执行catch子句和fanally子句,如果catch子句没有重新抛出异常,就会执行try语句之后的下一个语