<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/62ec1c3355398e076b2678ed/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62ec1c3355398e076b2678ed/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0"> <span class="_ _0"> </span> <span class="_ _1"> </span><span class="ff2 sc1">保密申明<span class="_ _2"></span>:秘<span class="_ _2"></span>密级<span class="ff1 sc0"> <span class="_"> </span><span class="ff3"> </span></span></span></div><div class="t m1 x2 h3 y2 ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 y3 ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 y4 ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 y5 ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x3 h4 y6 ff4 fs1 fc0 sc0 ls0 ws0">iCar<span class="_ _3"></span>ne<span class="_ _4"></span>gie J<span class="_ _5"></span>a<span class="_ _5"></span>va<span class="_ _6"> </span><span class="ff5 sc1">教材</span><span class="ff6"> </span></div><div class="t m1 x4 h4 y7 ff7 fs1 fc0 sc1 ls0 ws0">版<span class="_ _5"></span>本<span class="ff5">:<span class="ff4 sc0">1.0<span class="_ _5"></span> </span></span></div><div class="t m1 x2 h3 y8 ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 y9 ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 ya ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 yb ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 yc ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 yd ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 ye ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m1 x2 h3 yf ff4 fs1 fc0 sc0 ls0 ws0"> </div><div class="t m2 x5 h5 y10 ff2 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m2 x5 h5 y11 ff2 fs2 fc0 sc0 ls0 ws0"> </div><div class="t m3 x6 h6 y12 ff2 fs3 fc0 sc1 ls0 ws0">作者:<span class="ff1 sc0"> </span></div><div class="t m3 x7 h7 y13 ff3 fs3 fc0 sc0 ls0 ws0">Dani<span class="_ _2"></span>el Zhang </div><div class="t m3 x2 h6 y12 ff2 fs3 fc0 sc1 ls0 ws0">日期:<span class="ff1 sc0"> </span></div><div class="t m3 x8 h7 y13 ff3 fs3 fc0 sc0 ls0 ws0"> </div><div class="t m3 x6 h6 y14 ff2 fs3 fc0 sc1 ls0 ws0">审批:<span class="ff1 sc0"> </span></div><div class="t m3 x7 h7 y15 ff3 fs3 fc0 sc0 ls0 ws0"> </div><div class="t m3 x2 h6 y14 ff2 fs3 fc0 sc1 ls0 ws0">日期:<span class="ff1 sc0"> </span></div><div class="t m3 x8 h7 y15 ff3 fs3 fc0 sc0 ls0 ws0"> </div><div class="t m4 x2 h8 y16 ff8 fs4 fc1 sc0 ls0 ws0">Generated by Foxit PDF Creator © Foxit Software</div><div class="t m4 x2 h8 y17 ff8 fs4 fc2 sc0 ls0 ws0">http://www.foxitsoftware.com For evaluation only.</div></div><div class="pi" data-data='{"ctm":[1.612252,0.000000,0.000000,1.612252,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62ec1c3355398e076b2678ed/bg2.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0"> <span class="_ _0"> </span> <span class="_ _1"> </span><span class="ff2 sc1">保密申明<span class="_ _2"></span>:秘<span class="_ _2"></span>密级<span class="ff1 sc0"> <span class="_"> </span><span class="ff3"> </span></span></span></div><div class="t m2 x9 h5 y18 ff2 fs2 fc0 sc1 ls0 ws0">第十章 异 常<span class="_ _2"></span> 处 理 </div><div class="t m5 xa h9 y19 ff2 fs5 fc0 sc0 ls0 ws0">本章介绍<span class="ff3">Java</span>的异常处理机制。异常<span class="ff3">(exc<span class="_ _2"></span>ep<span class="_ _2"></span>tion)<span class="ff2">是在运行时代码序列中产生一种异常情</span></span></div><div class="t m5 x5 h9 y1a ff2 fs5 fc0 sc0 ls0 ws0">况。<span class="_ _7"></span>换句话说<span class="_ _2"></span>,<span class="_ _7"></span>异常是<span class="_ _2"></span>一个运行<span class="_ _2"></span>时错误。<span class="_ _8"></span>在不支持<span class="_ _2"></span>异<span class="_ _2"></span>常处理的计<span class="_ _2"></span>算机语言<span class="_ _2"></span>中,<span class="_ _7"></span>错误必<span class="_ _2"></span>须被手</div><div class="t m5 x5 h9 y1b ff2 fs5 fc0 sc0 ls0 ws0">工的检查和<span class="_ _2"></span>处理——<span class="_ _2"></span>典型的是<span class="_ _2"></span>通过错误<span class="_ _2"></span>代码的运<span class="_ _2"></span>用等<span class="_ _2"></span>等。<span class="_ _8"></span>这种方法既很笨拙<span class="_ _2"></span>也很麻<span class="_ _2"></span>烦。<span class="_ _8"></span><span class="ff3">Java</span></div><div class="t m5 x5 h9 y1c ff2 fs5 fc0 sc0 ls0 ws0">的异常处理<span class="_ _2"></span>避免了这<span class="_ _2"></span>些问题,<span class="_ _9"></span>而<span class="_ _2"></span>且在处理<span class="_ _2"></span>过程中,<span class="_ _9"></span>把运行时错误<span class="_ _5"></span>的管理带到了面向<span class="_ _5"></span>对象的世</div><div class="t m5 x5 h9 y1d ff2 fs5 fc0 sc0 ls0 ws0">界。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m3 xb h6 y1e ff2 fs3 fc0 sc1 ls0 ws0">10.1 异常<span class="_ _4"></span>处理基础 </div><div class="t m5 xa h9 y1f ff3 fs5 fc0 sc0 ls0 ws0">Java<span class="ff2">异常是一<span class="_ _2"></span>个描述在<span class="_ _2"></span>代码段中<span class="_ _2"></span>发生的异<span class="_ _2"></span>常<span class="_ _7"></span>(也就是出错)<span class="_ _7"></span>情况的对象。<span class="_ _7"></span>当异常<span class="_ _2"></span>情况发</span></div><div class="t m5 x5 h9 y20 ff2 fs5 fc0 sc0 ls0 ws0">生,一个代表该异常的对象被创建并<span class="_ _2"></span>且在导致该错误的方法中被引发(<span class="ff3">th<span class="_ _5"></span>row<span class="ff2">)。该方法可</span></span></div><div class="t m5 x5 h9 y21 ff2 fs5 fc0 sc0 ls0 ws0">以选择自己<span class="_ _2"></span>处理异常<span class="_ _2"></span>或传递该<span class="_ _2"></span>异常。<span class="_ _2"></span>两<span class="_ _2"></span>种情况下<span class="_ _2"></span>,<span class="_ _2"></span>该异常被捕获<span class="_ _5"></span>(<span class="ff3">c<span class="_ _2"></span>augh<span class="_ _2"></span>t<span class="ff2">)<span class="_ _2"></span>并处理。<span class="_ _2"></span>异常可</span></span></div><div class="t m5 x5 h9 y22 ff2 fs5 fc0 sc0 ls0 ws0">能是由<span class="_ _2"></span><span class="ff3">Java<span class="ff2">运行时系统<span class="_ _2"></span>产生,或<span class="_ _2"></span>者是由你<span class="_ _2"></span>的手工代<span class="_ _5"></span>码产生。被<span class="_ _2"></span><span class="ff3">Java<span class="ff2">引发的异<span class="_ _2"></span>常与违反<span class="_ _2"></span>语言规</span></span></span></span></div><div class="t m5 x5 h9 y23 ff2 fs5 fc0 sc0 ls0 ws0">范或超出<span class="_ _2"></span><span class="ff3">Java<span class="ff2">执行环境<span class="_ _2"></span>限制的基<span class="_ _2"></span>本错误有<span class="_ _5"></span>关。<span class="_ _a"></span>手工编<span class="_ _2"></span>码产生的异<span class="_ _2"></span>常基本上<span class="_ _2"></span>用于报告<span class="_ _2"></span>方法调用</span></span></div><div class="t m5 x5 h9 y24 ff2 fs5 fc0 sc0 ls0 ws0">程序的出错<span class="_ _2"></span>状况。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m5 xa h9 y25 ff3 fs5 fc0 sc0 ls0 ws0">Java<span class="ff2">异常处理<span class="_ _2"></span>通过<span class="ff3">5</span>个关<span class="_ _2"></span>键字控制<span class="_ _5"></span>:<span class="ff3">try</span>、<span class="_ _5"></span><span class="ff3">catch<span class="_ _2"></span><span class="ff2">、<span class="_ _2"></span><span class="ff3">th<span class="_ _2"></span>r<span class="_ _4"></span>ow<span class="ff2">、<span class="_ _2"></span><span class="ff3">th<span class="_ _2"></span>rows<span class="_ _2"></span><span class="ff2">和<span class="ff3"> <span class="_"> </span>finally<span class="_ _5"></span><span class="ff2">。下面讲述它们</span></span></span></span></span></span></span></span></span></div><div class="t m5 x5 h9 y26 ff2 fs5 fc0 sc0 ls0 ws0">如何工作的。程序声明了你想要的异常监控包含在一<span class="_ _4"></span>个<span class="ff3">try</span>块中。如果在<span class="ff3">tr<span class="_ _4"></span>y<span class="_ _2"></span><span class="ff2">块中发生异常,</span></span></div><div class="t m5 x5 h9 y27 ff2 fs5 fc0 sc0 ls0 ws0">它被抛出。<span class="_ _4"></span>你的代码<span class="_ _4"></span>可以捕捉这个异<span class="_ _4"></span>常(用<span class="_ _4"></span><span class="ff3">catch</span>)并且用某种合理的方法<span class="_ _4"></span>处理该异<span class="_ _4"></span>常。<span class="_ _4"></span>系</div><div class="t m5 x5 h9 y28 ff2 fs5 fc0 sc0 ls0 ws0">统产生的异<span class="_ _4"></span>常被<span class="ff3">Java<span class="_ _4"></span></span>运行时系统自动引<span class="_ _4"></span>发。手<span class="_ _4"></span>动引发一个异常,<span class="_ _4"></span>用关键<span class="_ _4"></span>字<span class="_ _4"></span><span class="ff3">th<span class="_ _2"></span>row<span class="ff2">。任何被<span class="_ _4"></span>引</span></span></div><div class="t m5 x5 h9 y29 ff2 fs5 fc0 sc0 ls0 ws0">发方<span class="_ _4"></span>法<span class="_ _4"></span>的<span class="_ _4"></span>异<span class="_ _4"></span>常都<span class="_ _4"></span>必须<span class="_ _4"></span>通过<span class="_ _4"></span><span class="ff3">thro<span class="_ _2"></span>ws<span class="ff2">子句<span class="_ _4"></span>定<span class="_ _4"></span>义<span class="_ _4"></span>。<span class="_ _4"></span>任<span class="_ _4"></span>何<span class="_ _4"></span>在方法<span class="_ _4"></span>返<span class="_ _4"></span>回<span class="_ _4"></span>前<span class="_ _4"></span>绝<span class="_ _4"></span>对被执<span class="_ _4"></span>行<span class="_ _4"></span>的代<span class="_ _4"></span>码<span class="_ _4"></span>被<span class="_ _4"></span>放置在</span></span></div><div class="t m5 x5 h9 y2a ff3 fs5 fc0 sc0 ls0 ws0">finally<span class="_ _5"></span><span class="ff2">块中。<span class="ff3"> </span></span></div><div class="t m5 xa h9 y2b ff2 fs5 fc0 sc0 ls0 ws0">下面是一个<span class="_ _2"></span>异常处理<span class="_ _2"></span>块的通常<span class="_ _2"></span>形式:<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m0 xa ha y2c ff9 fs0 fc0 sc0 ls0 ws0">try {<span class="_ _2"></span> </div><div class="t m0 xc ha y2d ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> // <span class="_ _2"></span>bloc<span class="_ _2"></span>k of<span class="_ _2"></span> cod<span class="_ _2"></span>e <span class="_ _2"></span>to m<span class="_ _2"></span>onit<span class="_ _2"></span>or f<span class="_ _2"></span>or e<span class="_ _2"></span>rror<span class="_ _2"></span>s<span class="_ _2"></span> </div><div class="t m0 xc ha y2e ff9 fs0 fc0 sc0 ls0 ws0">} </div><div class="t m0 xa ha y2f ff9 fs0 fc0 sc0 ls0 ws0">catch<span class="_ _2"></span> (Ex<span class="_ _2"></span>cept<span class="_ _2"></span>ionT<span class="_ _2"></span>ype1<span class="_ _2"></span> exO<span class="_ _5"></span>b) { </div><div class="t m0 xc ha y30 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _7"></span> <span class="_ _2"></span> //<span class="_ _2"></span> e<span class="_ _2"></span>xcep<span class="_ _2"></span>tion<span class="_ _2"></span> han<span class="_ _2"></span>dler<span class="_ _2"></span> for<span class="_ _2"></span> E<span class="_ _2"></span>xcep<span class="_ _2"></span>tion<span class="_ _2"></span>Type1<span class="_ _2"></span> </div><div class="t m0 xc ha y31 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span> }<span class="_ _2"></span> </div><div class="t m0 xa ha y32 ff9 fs0 fc0 sc0 ls0 ws0">catch<span class="_ _2"></span> (Ex<span class="_ _2"></span>cept<span class="_ _2"></span>ionT<span class="_ _2"></span>ype2<span class="_ _2"></span> exO<span class="_ _5"></span>b) { </div><div class="t m0 xc ha y33 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _7"></span> <span class="_ _2"></span> //<span class="_ _2"></span> e<span class="_ _2"></span>xcep<span class="_ _2"></span>tion<span class="_ _2"></span> han<span class="_ _2"></span>dler<span class="_ _2"></span> for<span class="_ _2"></span> E<span class="_ _2"></span>xcep<span class="_ _2"></span>tion<span class="_ _2"></span>Type2<span class="_ _2"></span> </div><div class="t m0 xc ha y34 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span> }<span class="_ _2"></span> </div><div class="t m0 xc ha y35 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span> //<span class="_ _2"></span> ...<span class="_ _2"></span> </div><div class="t m0 xc ha y36 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span> fi<span class="_ _2"></span>nall<span class="_ _2"></span>y {<span class="_ _5"></span> </div><div class="t m0 xc ha y37 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _7"></span> /<span class="_ _2"></span>/ bl<span class="_ _2"></span>oc<span class="_ _2"></span>k of<span class="_ _2"></span> cod<span class="_ _2"></span>e to<span class="_ _2"></span> be <span class="_ _2"></span>exec<span class="_ _2"></span>ut<span class="_ _2"></span>ed b<span class="_ _2"></span>efor<span class="_ _2"></span>e try<span class="_ _2"></span> blo<span class="_ _2"></span>ck e<span class="_ _2"></span>nds<span class="_ _5"></span> </div><div class="t m0 xc ha y38 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span> } </div><div class="t m5 xa h9 y39 ff2 fs5 fc0 sc0 ls0 ws0">这里,<span class="ff3">Exce<span class="_ _2"></span>p<span class="_ _2"></span>tionTyp<span class="_ _2"></span>e <span class="_"> </span><span class="ff2">是发生异常的类型<span class="_ _2"></span>。下<span class="_ _2"></span>面将介<span class="_ _2"></span>绍怎样应用<span class="_ _2"></span>这个框架<span class="_ _2"></span>。<span class="_ _2"></span><span class="ff3"> </span></span></span></div><div class="t m3 xd h6 y3a ff2 fs3 fc0 sc1 ls0 ws0">10.2 异 常<span class="_ _4"></span> 类 型 </div><div class="t m5 xa h9 y3b ff2 fs5 fc0 sc0 ls0 ws0">所有异常类<span class="_ _2"></span>型都是内<span class="_ _2"></span>置类<span class="ff3">T<span class="_ _2"></span>hrow<span class="_ _2"></span>able<span class="ff2">的子类。<span class="_ _c"></span>因此,<span class="_ _c"></span><span class="ff3">Th<span class="_ _2"></span>row<span class="_ _2"></span>able<span class="ff2">在异常类层次结构<span class="_ _2"></span>的顶<span class="_ _2"></span>层。</span></span></span></span></div><div class="t m5 x5 h9 y3c ff2 fs5 fc0 sc0 ls0 ws0">紧接着<span class="ff3">Th<span class="_ _2"></span>rowable<span class="ff2">下面的是两个把异<span class="_ _2"></span>常分成两个不同分支的子类。一个分<span class="_ _2"></span>支是<span class="ff3">Exce<span class="_ _2"></span>p<span class="_ _2"></span>tion<span class="ff2">。该</span></span></span></span></div><div class="t m5 x5 h9 y3d ff2 fs5 fc0 sc0 ls0 ws0">类用于用户<span class="_ _2"></span>程序可能<span class="_ _2"></span>捕捉的异<span class="_ _2"></span>常情况。<span class="_ _d"></span>它也<span class="_ _2"></span>是你可以<span class="_ _2"></span>用来创建你<span class="_ _2"></span>自己用户<span class="_ _2"></span>异常类型<span class="_ _2"></span>子类的类<span class="_ _2"></span>。</div><div class="t m5 x5 h9 y3e ff2 fs5 fc0 sc0 ls0 ws0">在<span class="ff3">Exce<span class="_ _2"></span>ption<span class="_ _2"></span><span class="ff2">分支中有一个重要子类<span class="ff3">Ru<span class="_ _5"></span>ntim<span class="_ _2"></span>eException<span class="ff2">。该类型的<span class="_ _5"></span>异常自动为你所编<span class="_ _2"></span>写的程序</span></span></span></span></div><div class="t m5 x5 h9 y3f ff2 fs5 fc0 sc0 ls0 ws0">定义并且包<span class="_ _2"></span>括被零除<span class="_ _2"></span>和非法数<span class="_ _2"></span>组索引这<span class="_ _2"></span>样的错误<span class="_ _2"></span>。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m4 x2 h8 y16 ff8 fs4 fc1 sc0 ls0 ws0">Generated by Foxit PDF Creator © Foxit Software</div><div class="t m4 x2 h8 y17 ff8 fs4 fc2 sc0 ls0 ws0">http://www.foxitsoftware.com For evaluation only.</div></div><div class="pi" data-data='{"ctm":[1.612252,0.000000,0.000000,1.612252,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62ec1c3355398e076b2678ed/bg3.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0"> <span class="_ _0"> </span> <span class="_ _1"> </span><span class="ff2 sc1">保密申明<span class="_ _2"></span>:秘<span class="_ _2"></span>密级<span class="ff1 sc0"> <span class="_"> </span><span class="ff3"> </span></span></span></div><div class="t m5 xa h9 y40 ff2 fs5 fc0 sc0 ls0 ws0">另一类分支<span class="_ _2"></span>由<span class="ff3">Erro<span class="_ _2"></span>r<span class="ff2">作为顶层,<span class="_ _e"></span><span class="ff3">Erro<span class="_ _2"></span>r<span class="ff2">定义了在通常<span class="_ _5"></span>环境下不希望被<span class="_ _5"></span>程序捕获的异常。<span class="_ _e"></span><span class="ff3">E<span class="_ _2"></span>rror</span></span></span></span></span></div><div class="t m5 x5 h9 y41 ff2 fs5 fc0 sc0 ls0 ws0">类型的异常<span class="_ _2"></span>用于<span class="_ _2"></span><span class="ff3">Java<span class="ff2">运行时系统<span class="_ _2"></span>来显示与<span class="_ _2"></span>运行时系<span class="_ _5"></span>统本身有关的<span class="_ _2"></span>错误。<span class="_ _9"></span>堆栈<span class="_ _2"></span>溢出是这<span class="_ _2"></span>种错误</span></span></div><div class="t m5 x5 h9 y42 ff2 fs5 fc0 sc0 ls0 ws0">的一例。本<span class="_ _4"></span>章将不讨<span class="_ _4"></span>论关于<span class="_ _4"></span><span class="ff3">Erro<span class="_ _2"></span>r<span class="ff2">类<span class="_ _4"></span>型的异常处理,因为<span class="_ _4"></span>它们通常<span class="_ _4"></span>是灾难性的致命错<span class="_ _4"></span>误,<span class="_ _4"></span>不</span></span></div><div class="t m5 x5 h9 y43 ff2 fs5 fc0 sc0 ls0 ws0">是你的程序<span class="_ _2"></span>可以控制<span class="_ _2"></span>的。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m3 x2 h6 y44 ff2 fs3 fc0 sc1 ls0 ws0"> </div><div class="t m3 xe h6 y45 ff2 fs3 fc0 sc1 ls0 ws0">10.3 未被<span class="_ _4"></span>捕获的异常 </div><div class="t m5 xa h9 y46 ff2 fs5 fc0 sc0 ls0 ws0">在你学习在<span class="_ _2"></span>程序中处<span class="_ _2"></span>理异常之<span class="_ _2"></span>前,<span class="_ _9"></span>看一看如果<span class="_ _5"></span>你不处理它们会有<span class="_ _5"></span>什么情况发生。<span class="_ _f"></span>下面的</div><div class="t m5 x5 h9 y47 ff2 fs5 fc0 sc0 ls0 ws0">小程序包括<span class="_ _2"></span>一个故意<span class="_ _2"></span>导致被零<span class="_ _2"></span>除错误的<span class="_ _2"></span>表达式。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m0 xa ha y48 ff9 fs0 fc0 sc0 ls0 ws0">class<span class="_ _2"></span> Exc<span class="_ _2"></span>0 {<span class="_ _2"></span> </div><div class="t m0 xa ha y49 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span>pub<span class="_ _2"></span>lic <span class="_ _2"></span>st<span class="_ _2"></span>atic<span class="_ _2"></span> voi<span class="_ _2"></span>d ma<span class="_ _2"></span>in(S<span class="_ _2"></span>trin<span class="_ _2"></span>g ar<span class="_ _2"></span>gs<span class="_ _2"></span>[]) <span class="_ _2"></span>{ </div><div class="t m0 xa ha y4a ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _7"></span>int d <span class="_ _5"></span>= 0; </div><div class="t m0 xa ha y4b ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _7"></span>int a <span class="_ _5"></span>= 42 / d<span class="_ _2"></span>;<span class="_ _2"></span> </div><div class="t m0 xa ha y4c ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span>} </div><div class="t m0 xa ha y4d ff9 fs0 fc0 sc0 ls0 ws0">} </div><div class="t m5 xa h9 y4e ff2 fs5 fc0 sc0 ls0 ws0">当<span class="ff3">Java</span>运行时<span class="_ _2"></span>系统检查<span class="_ _2"></span>到被零除<span class="_ _2"></span>的情况<span class="_ _2"></span>,<span class="_ _8"></span>它构造一个<span class="_ _2"></span>新的异常对<span class="_ _2"></span>象然后引<span class="_ _5"></span>发该异常。<span class="_ _8"></span>这</div><div class="t m5 x5 h9 y4f ff2 fs5 fc0 sc0 ls0 ws0">导致<span class="ff3">Exc0</span>的<span class="_ _4"></span>执行停止,因<span class="_ _4"></span>为一旦<span class="_ _4"></span>一个异<span class="_ _4"></span>常被引发,它必<span class="_ _4"></span>须被一<span class="_ _4"></span>个异常<span class="_ _4"></span>处理程序捕获<span class="_ _4"></span>并且<span class="_ _4"></span>被</div><div class="t m5 x5 h9 y50 ff2 fs5 fc0 sc0 ls0 ws0">立即处理<span class="_ _2"></span>。<span class="_ _b"></span>该例中,<span class="_ _b"></span>我们没有提供<span class="_ _5"></span>任何我们自己的异<span class="_ _5"></span>常处理程序,<span class="_ _b"></span>所以异常被<span class="_ _5"></span><span class="ff3">Java<span class="ff2">运行时系</span></span></div><div class="t m5 x5 h9 y51 ff2 fs5 fc0 sc0 ls0 ws0">统的默认处理程<span class="_ _2"></span>序捕获。<span class="fc3 sc0">任</span><span class="_ _2"></span><span class="fc3 sc0">何不是被你</span><span class="_ _2"></span><span class="fc3 sc0">程序捕获的</span><span class="_ _5"></span><span class="fc3 sc0">异</span><span class="fc3 sc0">常最终都会被系</span><span class="_ _2"></span><span class="fc3 sc0">统默认处理</span><span class="_ _2"></span><span class="fc3 sc0">程序处理。</span></div><div class="t m5 x5 h9 y52 ff2 fs5 fc0 sc0 ls0 ws0">默认处理程<span class="_ _2"></span>序显示一<span class="_ _2"></span>个描述异<span class="_ _2"></span>常的字符<span class="_ _2"></span>串,打印<span class="_ _2"></span>异常<span class="_ _2"></span>发生处的堆<span class="_ _2"></span>栈轨迹并<span class="_ _2"></span>且终止程<span class="_ _2"></span>序。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m5 xa h9 y53 ff2 fs5 fc0 sc0 ls0 ws0">下面是由标<span class="_ _2"></span>准<span class="ff3">java<span class="_ _2"></span>JDK<span class="ff2">运行时<span class="_ _2"></span>解释器执<span class="_ _2"></span>行该程序<span class="_ _2"></span>所产<span class="_ _2"></span>生的输出:<span class="_ _2"></span><span class="ff3"> </span></span></span></div><div class="t m0 xa ha y54 ff9 fs0 fc0 sc0 ls0 ws0">java.<span class="_ _2"></span>lang<span class="_ _2"></span>.Ari<span class="_ _2"></span>thme<span class="_ _2"></span>ticE<span class="_ _2"></span>xcep<span class="_ _5"></span>tion: / <span class="_ _2"></span>by<span class="_ _2"></span> zer<span class="_ _2"></span>o </div><div class="t m0 xa ha y55 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span> a<span class="_ _2"></span>t Ex<span class="_ _2"></span>c0.m<span class="_ _2"></span>ai<span class="_ _2"></span>n(Ex<span class="_ _2"></span>c0.j<span class="_ _2"></span>ava:<span class="_ _2"></span>4) </div><div class="t m5 xa h9 y56 ff2 fs5 fc0 sc0 ls0 ws0">注意,类名<span class="_ _2"></span><span class="ff3">Exc0<span class="ff2">,方法名</span>m<span class="_ _b"></span>ain<span class="ff2">,文件名</span>Exc0.jav<span class="_ _5"></span>a<span class="_ _4"></span><span class="ff2">和行数</span>4<span class="ff2">是怎样被<span class="_ _5"></span>包括在一个简单的<span class="_ _5"></span>堆</span></span></div><div class="t m5 x5 h9 y57 ff2 fs5 fc0 sc0 ls0 ws0">栈使用轨迹中的。还有,注意引发的<span class="_ _2"></span>异常类型是<span class="_ _2"></span><span class="ff3">Exce<span class="_ _2"></span>ption<span class="_ _2"></span><span class="ff2">的一个名为<span class="ff3">A<span class="_ _2"></span>rithmetic<span class="_ _2"></span>Exception<span class="ff2">的</span></span></span></span></div><div class="t m5 x5 h9 y58 ff2 fs5 fc0 sc0 ls0 ws0">子类,<span class="_ _b"></span>该子类更明<span class="_ _5"></span>确的描述了何种类<span class="_ _2"></span>型的错误<span class="_ _2"></span>方法。<span class="_ _7"></span>本章后面部分将讨论<span class="_ _5"></span>,<span class="_ _b"></span><span class="ff3">J<span class="_ _4"></span>ava<span class="ff2">提供多个内</span></span></div><div class="t m5 x5 h9 y59 ff2 fs5 fc0 sc0 ls0 ws0">置的与可能<span class="_ _2"></span>产生的不<span class="_ _2"></span>同种类运<span class="_ _2"></span>行时错误<span class="_ _2"></span>相匹配的<span class="_ _2"></span>异常<span class="_ _2"></span>类型。<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m5 xa h9 y5a ff2 fs5 fc0 sc0 ls0 ws0">堆栈轨迹将显<span class="_ _2"></span>示导致错误<span class="_ _2"></span>产生的方<span class="_ _2"></span>法调用序列<span class="_ _2"></span>。例如<span class="_ _2"></span>,下面是前面<span class="_ _5"></span>程序的另一个版本,</div><div class="t m5 x5 h9 y5b ff2 fs5 fc0 sc0 ls0 ws0">它介绍了相<span class="_ _2"></span>同的错误<span class="_ _2"></span>,但是错<span class="_ _2"></span>误是在<span class="ff3">m<span class="_ _5"></span>ain( )<span class="ff2">方法之外<span class="_ _2"></span>的另一个方<span class="_ _2"></span>法中产生<span class="_ _2"></span>的:<span class="_ _2"></span><span class="ff3"> </span></span></span></div><div class="t m0 xa ha y5c ff9 fs0 fc0 sc0 ls0 ws0"> </div><div class="t m0 xa ha y5d ff9 fs0 fc0 sc0 ls0 ws0">class<span class="_ _2"></span> Exc<span class="_ _2"></span>1 {<span class="_ _2"></span> </div><div class="t m0 xa ha y5e ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span>sta<span class="_ _2"></span>tic <span class="_ _2"></span>vo<span class="_ _2"></span>id s<span class="_ _2"></span>ubro<span class="_ _2"></span>utin<span class="_ _2"></span>e() <span class="_ _2"></span>{<span class="_ _2"></span> </div><div class="t m0 xa ha y5f ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _7"></span>int d <span class="_ _5"></span>= 0; </div><div class="t m0 xa ha y60 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _7"></span>int a <span class="_ _5"></span>= 10 / d<span class="_ _2"></span>;<span class="_ _2"></span> </div><div class="t m0 xa ha y61 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span>} </div><div class="t m0 xa ha y62 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span>pub<span class="_ _2"></span>lic <span class="_ _2"></span>st<span class="_ _2"></span>atic<span class="_ _2"></span> voi<span class="_ _2"></span>d ma<span class="_ _2"></span>in(S<span class="_ _2"></span>trin<span class="_ _2"></span>g ar<span class="_ _2"></span>gs<span class="_ _2"></span>[]) <span class="_ _2"></span>{ </div><div class="t m0 xa ha y63 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _b"></span> <span class="_ _7"></span>Exc1.s<span class="_ _5"></span>ubroutin<span class="_ _2"></span>e(<span class="_ _2"></span>); </div><div class="t m0 xa ha y64 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _b"></span>} </div><div class="t m0 xa ha y65 ff9 fs0 fc0 sc0 ls0 ws0">} </div><div class="t m5 xa h9 y66 ff2 fs5 fc0 sc0 ls0 ws0">默认异常处<span class="_ _2"></span>理器的堆<span class="_ _2"></span>栈轨迹结<span class="_ _2"></span>果表明了<span class="_ _2"></span>整个调用<span class="_ _2"></span>栈是<span class="_ _2"></span>怎样显示的<span class="_ _2"></span>:<span class="_ _2"></span><span class="ff3"> </span></div><div class="t m0 xa ha y67 ff9 fs0 fc0 sc0 ls0 ws0">java.<span class="_ _2"></span>lang<span class="_ _2"></span>.Ari<span class="_ _2"></span>thme<span class="_ _2"></span>ticE<span class="_ _2"></span>xcep<span class="_ _5"></span>tion: / <span class="_ _2"></span>by<span class="_ _2"></span> zer<span class="_ _2"></span>o </div><div class="t m0 xa ha y68 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span>at E<span class="_ _2"></span>xc1.<span class="_ _2"></span>subr<span class="_ _2"></span>ou<span class="_ _2"></span>tine<span class="_ _2"></span>(Exc<span class="_ _2"></span>1.ja<span class="_ _2"></span>va:4<span class="_ _2"></span>)<span class="_ _2"></span> </div><div class="t m0 xa ha y69 ff9 fs0 fc0 sc0 ls0 ws0"> <span class="_ _b"></span> <span class="_ _2"></span>at E<span class="_ _2"></span>xc1.<span class="_ _2"></span>main<span class="_ _2"></span>(E<span class="_ _2"></span>xc1.<span class="_ _2"></span>java<span class="_ _2"></span>:7)<span class="_ _2"></span> </div><div class="t m4 x2 h8 y16 ff8 fs4 fc1 sc0 ls0 ws0">Generated by Foxit PDF Creator © Foxit Software</div><div class="t m4 x2 h8 y17 ff8 fs4 fc2 sc0 ls0 ws0">http://www.foxitsoftware.com For evaluation only.</div></div><div class="pi" data-data='{"ctm":[1.612252,0.000000,0.000000,1.612252,0.000000,0.000000]}'></div></div>