前面扯过一篇浅谈面向对象与女娲造人今儿我接着扯…… 在我的理解中所谓的异常机制也就是让程序在出现某些错误的情况下还能继续执行完如同两个人在恋爱虽然出现各种问题但还是希望将来能继续走下去 在java的异常结构中有一个顶级父类叫做Throwable这个父类具有两个子类分别是 Error Exception 为了便于初学者能更好的理解异常机制我姑且先列举一些不恰当的例子 可以这样理解Error 你某天很舒服的坐在沙发上看电视你爸突然把你拉到书房里语重心长的对你说 你和她不能在一起她其实是你失散多年的亲妹妹(神马感觉心里一万只草泥马在奔跑对不对?) 终于能在一起了尼玛突然在她房间抽屉发现当年变性手术的费用单(这次不只一万只了) 两个例子都有一个共同点就是你不会和她继续在一起了你们的结合会是一种Error(错误)是硬伤!!! 对于这种根本无法解决或无法隐忍的情况就是所谓的Error懂了吧 而在java语言中Error则是代表硬件jvm或代码本身存在问题 虽然你对于无法处理这一情况很不甘心但你还是会一遍遍检查配置和你的代码以期望能够解决 再看看Exception 把致命问题Error排除了(她是个好女孩)现在你和她能够在一起(程序能够继续执行)又多了一份希望 但是你仍然不能掉以轻心 两个人相处难免会产生一些不好的情绪一旦你没能处理好那么两个人的感情还是over(程序无法继续执行) 在这里Exception就是那些你要处理的情绪问题的总称 为什么是总称呢?因为大脑产生的情绪(异常)非常复杂还可细分为各种情绪(纠结体)…… 我们判断一个人的情绪是靠经验比如产生这种坏情绪后她有哪些行为和反映 在java里Exception是一个父类它还有很多的子类(也就是各种坏情绪的封装) 你看就这么简单我们就理解了整个java的异常体系 Throwable下的两个已知子类Error和Exception Exception下的各个细分的异常 既然我们了解了java的异常体系也知道了Error是无法处理的那么我们能做的就是针对Exception的操作了 也就是在恋爱过程中我们对她坏情绪的处理好让两个人的感情能够继续…… 那么如何操作呢? 很简单你只需要进行判断和测试确认她的行为是否符合你经验中她这一坏情绪的反映然后做出处理就行了 相信你一定知道基本的除数为异常这里就不再写了任何一本基础书都有 为了避免针对性的代码造成不好理解我们下面都写伪码 实例典型的trycatch结构 //女友为什么是public?因为谁都能追 publicclassGirlFriend{ //还记得吗?你们的故事就是从这开始的 publicstaticvoidmain(String[]args){ //我们用try包裹的代码来判断和测试她不稳定的坏情绪 try{ 她小情绪的反映 她小情绪的行为 她小情绪的眼神 …… //在实际中则是Exceptione你肯定知道 //为什么有个e对象都说了异常也是一种类 //所谓的catch就是捉到她坏情绪的原因并进行处理 }catch(工作累了异常e){ //打印异常信息你可以认为是她在诉说原因 //实际中我们要结合场景来处理 eprintStackTrace(); } } } 你看这样我们就能有针对性的处理单个异常了在try里面测试catch里面进行处理当然有时候一个人情绪不好是由于多种原因那么你只能小心翼翼的根据经验来捕捉更多的异常(坏情绪的封装对象)此时你也就需要多条catch语句了 实例复合的catch语句 try{ }catch(工作累了异常e){ 捶背 }catch(口渴了异常e){ 倒水 }catch(被鄙视了异常e){ 安慰 //这里的Exception是所有坏情绪的父类 }catch(Exceptione){ 各种安慰 各种献殷勤 各种倾听 } 为什么所有坏情绪对象(Exception)要放到最后捕捉呢? 很好理解当你在无法确定她到底是累了渴了还是怎么地产生的坏情绪时你便可以认为反正她就是特么的很烦想闹脾气你得处理!!!(不然就over) 好吧你看到了不论是讨好女友还是处理异常都是一件相当不爽的事 下面我们来看看一个很简单很朴实的关键字finally 实例finally语句的使用 try{ }catch(Exceptione){ //Todo }finally{ 不管你特么心情好不好 反正都是老子洗碗!!! 靠…… } 看finally好用吧你可以这样理解 是男人就应该默默的承担不管有没有异常我都执行在java中finally最常用的场合就是最后关闭io流对象了可见我写的另一篇笔记 至此我们已经讲完了java异常的基础操作 新手可能会问咦?throws和throw两大关键字去哪儿了 别急咋慢慢来去端杯茶缓缓…… 对于throws在java中的意思是让调用处去处理这一异常 就比如说她们受了一顿闷气本来你不说还没什么你一说她们就忍不住了 把所有的火都对你发谁让你要去惹她们的? 自己可以处理却不处理俺们就叫做throws一般在方法后面使用 实例throws的用法 publicvoid降低愤怒()throws愤怒的异常{ /*你看在这里明明可以trycatch的 但是却没有把异常给抛到了调用处*/ //这是处理方法此处省略N行代码 } 本来在降低愤怒()这一方法中可以trycatch的但是不想要留给招惹它的人那就用throws吧谁惹我谁遭殃 其实女人是一种很奇怪的动物她们有时候会假装自己生气从而达到让你哄的目的典型的欠try有木有…… 那么这个时候throw就发挥了作用在java中throw表示人为的抛出一个异常 实例throw的用法 publicvoidthrowMethod()throwsException{ thrownew发嗲了异常(干爹你来~~) } 这里在throwMethod方法中我们人为抛出了一个发嗲了异常然后给调用处try 至于catch部分的内容你们自己看着办……(尼玛我才怎么就那么**了) 再来我们在翻看API文档的时候也许会发现类似下面的方法 它们明明抛出了异常而我们在使用中却没有try这是怎么回事? 这叫做RuntimeException也就是运行时异常它们可try可不try因为一旦产生这种异常就说明你的代码可能存在问题比如数组下标越界等此时trycatch意义不大检查和修改源码才是最佳选择最后来说说自定义异常自定义异常一般用的不是很多可以这样理解 有时候你的女友乱发脾气完全不按套路出牌令你不知所措以前的经验在此也似乎失效那么此时我们就可以定义一个自定义异常来描述这种情况 publicclassCustomExceptionextendsException{ publicCustomException(Stringmsg){ super(msg); } } 如果想测试的话可以throw一个新的CustomException对象构造方法中加入信息就可以了 然后你懂的trycatch处理 很简单就没必要演示了 |