java抛出异常与finally实例解析
这篇文章主要介绍了java抛出异常与finally实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
代码如下:
packagetest1;
publicclassEmbededFinally{
publicstaticvoidmain(Stringargs[]){
intresult;
try{
System.out.println("inLevel1");
try{
System.out.println("inLevel2");
//result=100/0;//Level2
try{
System.out.println("inLevel3");
result=100/0;//Level3
}
catch(Exceptione){
System.out.println("Level3:"+e.getClass().toString());
}
finally{
System.out.println("InLevel3finally");
}
//result=100/0;//Level2
}
catch(Exceptione){
System.out.println("Level2:"+e.getClass().toString());
}
finally{
System.out.println("InLevel2finally");
}
//result=100/0;//level1
}
catch(Exceptione){
System.out.println("Level1:"+e.getClass().toString());
}
finally{
System.out.println("InLevel1finally");
}
}
}
运行结果如上图:
对于代码的分析:前三行输出结果,是try中三个正常的输出语句,并且在最后抛出了一个byzero错误。然后用catch语句捕捉了这个语句,并且输出了语句。但我们会发现后面的catch语句都没有被执行,而是直接执行了finally语句,说明finally语句改变了代码中输出的逻辑。但具体的原因尚不明确。
最后,提出一个小问题:finally语句一定会执行吗?
我姑且自己回答一下,如果在finally之前使用了exit,退出了程序,那么finally语句就不会执行了。
比如,我们用以下的测试代码:
packagetest1;
publicclassSystemExitAndFinally{
publicstaticvoidmain(String[]args)
{
try{
System.out.println("inmain");
thrownewException("Exceptionisthrowninmain");
//System.exit(0);
}
catch(Exceptione)
{
System.out.println(e.getMessage());
System.exit(0);
}
finally
{
System.out.println("infinally");
}
}
}
运行结果如图:
我们可以看到,finally后的语句并没有被输出,而在退出程序前的语句并没有任何影响。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。