一个try块可以不执行finally子句就能够退出的唯一方法是通过调用System.exit()方法来实现的。
如果控制因为一个return,continue或break语句离开这个try块,那么finally快会在控制转移到它的新的目标代码之前执行.
也就是说如果在finally块中使用return,continue或break,则会把抛出的异常吃掉。
packagetest;
publicclassTryTest{
publicstaticvoidmain(String[]args){
try{
System.out.println(TryTest.test());//返回结果为true其没有任何异常
}catch(Exceptione){
System.out.println("Exceptionfrommain");
e.printStackTrace();
}
}
publicstaticbooleantest()throwsException{
try{
thrownewException("Somethingerror");//1.抛出异常
}catch(Exceptione){//2.捕获的异常匹配(声明类或其父类),进入控制块
System.out.println("Exceptionfrome");//3.打印
returnfalse;//4.return前控制转移到finally块,执行完后再返回
}finally{
returntrue;//5.控制转移,直接返回,吃掉了异常
}
}
}
如果控制因为一个return,continue或break语句离开这个try块,那么finally快会在控制转移到它的新的目标代码之前执行.
也就是说如果在finally块中使用return,continue或break,则会把抛出的异常吃掉。
packagetest;
publicclassTryTest{
publicstaticvoidmain(String[]args){
try{
System.out.println(TryTest.test());//返回结果为true其没有任何异常
}catch(Exceptione){
System.out.println("Exceptionfrommain");
e.printStackTrace();
}
}
publicstaticbooleantest()throwsException{
try{
thrownewException("Somethingerror");//1.抛出异常
}catch(Exceptione){//2.捕获的异常匹配(声明类或其父类),进入控制块
System.out.println("Exceptionfrome");//3.打印
returnfalse;//4.return前控制转移到finally块,执行完后再返回
}finally{
returntrue;//5.控制转移,直接返回,吃掉了异常
}
}
}
博客介绍了Java里try块退出的情况,唯一不执行finally子句退出的方法是调用System.exit()。若因return等语句离开try块,finally块会先执行。还指出在finally块用return等会吃掉异常,并给出示例代码说明。
2387

被折叠的 条评论
为什么被折叠?



