Java异常

Throwable父类

Throwable是java中所有异常类的父类,其下有两个子类:Error和Exception。

其中,Error异常类主要是反映系统层面的错误,如虚拟机内存溢出、程序死锁等,用得比较少,一旦出现就说明程序彻底挂了。

Exception类用得比较多,主要是指当编码、环境、用户操作输入出错等问题出错时抛出的异常,其下有许多子类,可分为两类异常:非检查异常与检查异常。

非检查异常指的是“RuntimeException”,其下还有许多子类,出现原因可能是引用了一个空对象的属性或方法,数组访问越界、类型转换错误,还有可能是算术方面引起的一些异常等等。如下图:

引起检查异常的原因多种多样,如文件不存在、数据库连接错误等,与非检查异常不同,我们需要手动添加捕获以及处理异常的语句:

处理异常

在java中我们用“try.....catch”或“try.....catch....finally”来处理异常

try.....catch

语法:

发生异常时,try中语句停止执行,转而执行catch中的语句,而程序中的其他语句会继续正常执行。catch中的语句如何执行由程序人员决定。如:

可使用多重catch语句块来针对不同的异常:

书写多重catch语句块时,要注意先小后大,即先子类,后父类,如下:

因为出现异常时程序会就近寻找异常处理语句,而子类继承于父类,针对于父类的异常对于子类来说也是同样会发生的。

try.....catch....finally

如果当出现异常后还要进行一些“善后”的工作的话,就可以使用finally了,语法如下:


执行顺序为:先执行try,抛出异常后执行catch,如果有finally则再执行finally中的语句,然后就是try..catch..finally语句块之外的语句,最后回到主函数。(对于Exception类型的对象e,可以e.printStackTrace()方法来打印错误信息。)




异常抛出及自定义异常

用throw或throws来抛出异常

语法如下:

throws后面可以紧跟多种异常,多种异常之间用逗号隔开。throw则是写在方法体里面,表示抛出的动作。

如果某个方法调用了会抛出异常的方法,那么必须添加try..catch来捕获这种异常,或者添加throws声明来将异常抛出给更上一层的调用者去进行处理(如同工厂中出现了原料短缺的异常,这种异常员工无法自行处理,只能抛给更上一层的领导去处理),throw抛出异常后,后续程序不会再运行。如下:

以下是java类库中丰富的异常种类:

自定义异常

除了java类库中的异常,我们还可以自定义异常,自定义的异常必须继承于java类库中已有的异常类,或者继承于基类Exception,语法如下:

如下就是我们自定义的一个异常类:

异常链

有时候我们会再捕获一个异常,然后抛出另外一个新的异常,并且在新的异常中添加对原始异常的引用,希望把异常原始信息保存下来,这被称为异常链。比如以下例子:


test1用于抛出上面自定义的异常类DrunckException,在test2中调用了test1捕获异常,然后抛出另外一个异常,并将异常信息包装到RuntimeException中,然后抛出,main方法中打印错误信息,运行结果如下:


总结


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 异常分类 Java将异常分为两种,Checked异常和Runtime异常。Java认为Checked异常都是可以在...
    LLorenzo阅读 710评论 0 1
  • 来源:https://www.cnblogs.com/Qian123/p/5715402.html#_label0...
    Alex笔记阅读 375评论 0 1
  • Java异常简介 Java异常是Java提供的一种识别及响应错误的一致性机制。Java异常机制可以使程序中异常处理...
    JourWon阅读 1,259评论 0 5
  • Java异常类型 所有异常类型都是Throwable的子类,Throwable把异常分成两个不同分支的子类Erro...
    予别她阅读 926评论 0 2
  • 随着年龄的增长,从90后的少年迈入而立之年,越发焦虑,有一种越长大越不淡定的感觉,老是觉得小时候的生活是美好的,现...
    笑脸老师阅读 346评论 0 3