Java异常:你是异常的失落

Java异常


Java异常1. 什么是异常2. 异常的分类3. 论叔侄之间的亲密关系4. 异常处理5. finally语句6. 一些注意事项7. 复习题

1. 什么是异常

在Java中,异常是一种对象,表示阻止正常运行的程序执行的错误或者情况。

更通俗来说就是经常让我们程序崩溃的东西,比如刚刚我的代码就挂了

image.png
  • 异常都有有哪些类型,都一定会弄死我的小可爱么

  • 我该怎么抢救一下 小可爱


2. 异常的分类

  1. Throwable类是所有异常类的父类,所有的异常都是它的后代。(Throwable:我 ,是你爸爸,或者爷爷)

  2. Error类:system error,描述的是系统内部错误,比如虚拟机炸了啊(VirtualMachineError)什么的。

    死亡率:百分之百

  3. Exception类:由程序和外部环境引起的错误,可以被程序捕获和处理。也就是说,这种异常!可以抢救一下! 小可爱:我觉得我还可以抢救一下

族谱

throwable.jpg

3. 论叔侄之间的亲密关系

上回说到,ErrorException 是一对亲兄弟,都有着好几个儿子。其中Exception 的儿子RuntimeException 就格外喜欢他的叔叔Error,天天想着溜到他们家,就是这个样子

shushu.png

上天也被他们之间的 爱情 感动到了,于是为了让他们近亲结婚 ,免去了婚检,从此ErrorRuntimeRxception 被划分为免检异常 ,其他异常为必检异常 。 这种关系是不正常的,所以免检异常是在程序中必须纠正的逻辑错误 。 PS:前面我发的那个截图就属于免检异常。

  • 免检异常:Java语言不强制要求编写代码捕获或声明免检异常。可能在程序的任何一个地方出现。
  • 必检异常:编译器强行要求程序员检查并通过try-catch语句处理,或者在方法头进行声明。

4. 异常处理

假如我们在工作中遇到问题该怎么处理?一般来说有两种情况,第一种就是自己觉得能解决就自己处理了,当自己解决不了,那就上报给上级找个大腿来解决。对Java来说同样是如此。

  1. 声明异常

    当一个方法可能会抛出必检异常,则必须在方法中头中声明。throws后面可跟多个异常。如下所示: public void method() throws IOException

    何时需要声明异常?

    当方法中需要抛出异常或者说该方法调用的子方法有抛出异常,但是没有对该异常进行捕获处理

  2. 抛出异常

    a. 检测到错误的程序可以创建一个合适的异常类型示例并抛出它。示例:

    IOException ex = new IOException(); throw ex;

    或者是:

    throw new IOException();

    注意声明异常和抛出异常关键字的区别

    b. 抛出链式异常,同原始异常一起抛出一个新异常(带有附加信息),称为链式异常。

  try{
          p1();
      }
      catch(Exception ex){
          throw new Exception(ex);  //在捕获到异常后,带着这个异常抛出一个新异常
                                    //若输出异常信息,会先显示该方法抛出的异常,再显示p1产生的异常
      }
  1. 捕获异常

    在使用中,将可能产生异常的语句放到try里面,若产生异常则会跳过剩下的语句,执行相应的catch部分的语句。

    注意:捕获多个异常时,若父类的catch块在子类之前,则会导致编译错误。如下面,若ex1是ex2的父类则会出错。

  try {
      statements;  //可能产生异常的语句放入try里面
  }
  catch (Exception1 ex1){
      handle for ex1;  //对第一个异常进行处理
  }
  catch (Exception2 ex2){
      handle for ex2;  //对第二个异常进行处理
  }
  1. “上级”(调用者)对必检异常的处理:

    若方法中声明了一个必检异常,则调用者必须在try-catch语句中执行,或者在调用者方法头中声明异常(即再把异常交给它的上级)。例如:若p2()可能会抛出一个必检异常(以IOException为例),方法p1()调用p2,则应该如下处理:

    //捕获p2 的异常
      void p1(){
          try{
              p2();
          }
          catch(IOException ex){
              ...
          }
      }
      //抛出p2的异常
      void p1() throws IOException(){
          p2();
          ...
      }

5. finally语句

若希望无论是否出现异常,都执行某些代码,则使用finally。(例如各种连接的关闭)

  1. 使用finally时可以省略catch块
  1. 即使在到达finally前有return语句,依旧会执行finally的代码

6. 一些注意事项

  1. 捕获异常时,尽量不要捕获通用异常,如catch(Exception e),应该捕获特定异常。否则可能会捕获到意想不到的异常,而且也会令他人不易理解自己的代码。

  2. 对于捕获到的异常不要忽略

  3. 记住“Throw early catch late”(早点抛出异常延迟抓取异常)原则,这个原则就是说,应该在异常出现时就将其抛出,抓取应该在能够获取足够信息的时候。简单来说,底层的方法应该更多的抛出异常,异常应该更多的在顶层代码中抓取处理。

  4. 异常处理会花费较大的时间和资源,不要用异常处理来做简单的逻辑测试。如非必要,勿用异常


7. 复习题

  1. throw、throws区别

  2. 必检异常和免检异常区别

  3. NoClassDefFoundError 和 ClassNoFoundException区别

欢迎关注灵魂画手的公众号!赔我板栗

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

推荐阅读更多精彩内容