【修真院XX小课堂】java异常处理机制

论坛 期权论坛     
选择匿名的用户   2021-5-23 05:25   799   0
<p>背景介绍</p>
<p>Java <span style="font-family:&#39;宋体&#39;;">为什么引入异常处理机制?</span></p>
<p>在没有异常处理机制的语言里在函数调用过程中就只能通过检查函数返回值对照错误码方式来判断函数调用是否正确执行,这会扰乱正常代码流程。使用异常处理的好处有两点。第一,异常处理让异常无法像错误码一样被忽略,必须写代码去捕获。第二,使用异常代替返回错误码,错误处理代码就能从主路径的代码中分离出来得到简化。</p>
<p><br></p>
<p></p>
<p>知识剖析</p>
<p>异常是什么?</p>
<p>程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。</p>
<p>Java<span style="font-family:&#39;宋体&#39;;">针对异常提供的解决办法  就是异常处理机制。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,还能保持代码的清晰。</span></p>
<p><span style="color:rgb(0,0,0);background:rgb(255,255,255);">Java<span style="font-family:&#39;宋体&#39;;">虚拟机用方法调用栈来跟踪每个线程中一系列的方法调用过程。每个线程都有一个独立的方法调用栈。从</span><span style="font-family:Helvetica;">Java</span><span style="font-family:&#39;宋体&#39;;">应用程序的主线程开始入口方法</span><span style="font-family:Helvetica;">main()</span><span style="font-family:&#39;宋体&#39;;">。当一个新方法被调用时,</span><span style="font-family:Helvetica;">Java</span><span style="font-family:&#39;宋体&#39;;">虚拟机把该方法的栈结构置入栈顶,执行该方法。</span></span></p>
<p><span style="color:rgb(0,0,0);background:rgb(255,255,255);"><span style="font-family:&#39;宋体&#39;;">当被调用的方法正常执行完毕,</span>Java<span style="font-family:&#39;宋体&#39;;">虚拟机会从调用栈中弹出该方法的栈结构,然后继续处理前一个方法。如果在执行方法的过程中抛出异常,则</span><span style="font-family:Helvetica;">Java</span><span style="font-family:&#39;宋体&#39;;">虚拟机寻找能捕获该异常的</span><span style="font-family:Helvetica;">catch</span><span style="font-family:&#39;宋体&#39;;">代码块。它首先查看当前方法是否存在这样的</span><span style="font-family:Helvetica;">catch</span><span style="font-family:&#39;宋体&#39;;">代码块,如果存在,那么就执行该</span><span style="font-family:Helvetica;">catch</span><span style="font-family:&#39;宋体&#39;;">代码块;否则,</span><span style="font-family:Helvetica;">Java</span><span style="font-family:&#39;宋体&#39;;">虚拟机会从调用栈中弹出该方法的栈结构,继续到前一个方法中查找合适的</span><span style="font-family:Helvetica;">catch</span><span style="font-family:&#39;宋体&#39;;">代码块。直到找到了处理该异常的代码块,当</span><span style="font-family:Helvetica;">Java</span><span style="font-family:&#39;宋体&#39;;">虚拟机追溯到调用栈的底部的方法时,也就是</span></span><span style="color:rgb(0,0,0);background:rgb(255,255,255);">main<span style="font-family:&#39;宋体&#39;;">方法   </span></span><span style="color:rgb(0,0,0);background:rgb(255,255,255);"><span style="font-family:&#39;宋体&#39;;">仍然没有找到处理该异常的代码块</span></span><span style="color:rgb(0,0,0);background:rgb(255,255,255);"> </span><span style="color:rgb(0,0,0);background:rgb(255,255,255);"><span style="font-family:&#39;宋体&#39;;">打印来自方法调用栈的异常信息。这个过程就是异常追踪栈。然后终止线程。</span></span></p>
<p><span style="color:rgb(0,0,0);background:rgb(255,255,255);"><span style="font-family:&#39;宋体&#39;;"></span></span></p>
<p><span style="color:rgb(0,0,0);background:rgb(255,255,255);"><span style="font-family:&#39;宋体&#39;;">异常的分类</span></span></p>
<p><span style="color:rgb(51,51,51);background:rgb(255,255,255);"><span style="font-family:Helvetica;">根据</span>java对异常处理的要求,可以将异常分为非检查异常和检查异常。这里的检查是对于java编译器来说的。</span></p>
<p align="justify" style="background:rgb(255,255,255);"><span style="color:rgb(51,51,51);"><span style="font-family:Helvetica;">非检查异常指</span>error</span><span style="color:rgb(0,0,0);"> <span style="font-family:Helvetica;">和</span> </span><span style="color:rgb(0,0,0);"><span style="font-family:&#39;宋体&#39;;">运行时异常</span></span><span style="color:rgb(0,0,0);"> <span style="font-family:Helvetica;">以及他们的子类</span></span><span style="color:rgb(0,0,0);"><span style="font-family:&#39;宋体&#39;;">。</span></span><span style="font-family:&#39;宋体&#39;;">这种异常的特点是</span>Java<span style="font-family:&#39;宋体&#39;;">编译器不会检查它,也就是说,当程序中可能出现这类异常时,即使没有捕获它,也没有抛出它,还是会编
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP