• 异常


    异常:

    Throwable 类是 Java 语言中所有错误或异常的超类。

    是什么?

    程序在运行出现的问题,

    异常的分类:

    • Throwable: 它是所有错误与异常的超类(祖宗类):

      • Error错误:必须修改代码,系统性问题

      • Exception:

        ​ RuntimeException:运行时异常

        ​ 非RuntimeException:编译时异常

    如果不显式处理异常,最终会抛给jvm

    成员方法

    toString()
    获取异常类名和异常信息,返回字符串。

    printStackTrace()(常用)
    获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

    有哪些捕获方式?异常怎么捕获?

    标准格式:

    try {
    可能发生错误的代码
    } catch (异常类名 异常对象名) {
    对异常处理
    } finally {
    释放资源
    }
    

    finally 一定会执行,在异常发生之前执行。return也挡不住,System.exit(0)结束jvm

    多个异常怎么捕获

    try{}
    
    catch(){}
    
    catch(){}
    
    catch(){}
    

    一旦try catch有一个分支匹配成功,结束try catch

    注意:

    • catch捕获的异常类名 不要写太宽泛的Exception。写具体的。
    • try代码块中某个位置产生了异常,那么try中的代码就不继续执行了
      • 也就是说try当中要么不产生异常,要么只会产生一个异常
    • catch中可以填入多个异常对象匹配,用符号 |,类型可写多个,引用只要一个。一般叫e。
    • try catch尽量简洁高效。
    • 异常类最常用的方法,e.printStackTrace() 打印和jvm报错一样的信息。包含异常的全限定类名,出错原因,出错行数
    • finally怎么都会执行。
    • 运行时异常,什么都不写自动抛出

    捕获异常干什么

    实际开发中,出现问题时经常的,但不是所有的问题都要让整个程序立即结束运行,这样会使用户的体验不好。通过异常捕获处理,让不影响全局的小错误,即使解决,或者暂时搁置,或者回馈给用户友好的信息。让整个程序继续运行。

    抛出异常

    throws

    • main方法抛出异常时不合理的。

    • throws(可能抛出) :在不需要处理的方法跑出去,在需要处理的地方让调用者处理。

    • 抛出编译时异常,会要求显式处理

    • 抛出运行时异常,不会要求显式处理

    • 当直接抛出Exception的时候,编译器会把它当作编译时异常处理,要求必须显式处理

    • 当同时抛出两个都是编译时异常且还有父子关系的时候,会强制要求显式处理父类异常,

    方法的重写问题中异常问题:

    子类重写方法,不能比父类中抛出更多异常。

    具体情况:

    当父类抛出编译时异常

    • 可以不抛出异常
    • 可以抛出一样的异常
    • 不能抛出不一样的编译时异常
    • 子类的重写方法可以抛出运行时异常

    父类抛出运行时异常

    • 子类重写方法不能抛出Exception

    • 子类重写方法可以是让任何运行时的异常

    • 子类抛出编译时,多态调用时会对程序有影响。不能使编译时异常

      父类不抛出异常,子类重写方法不能抛出编译时异常。

    在异常没有产生的时候,显式的抛出异常,是对调用者的警告。

    throw

    throw关键字一定会抛出一个异常对象

    • 编译时异常的throw 一般配合throws使用

    两种异常的处理方式

    从使用代码上:

    运行时异常:一般出现了优化代码即可

    编译时异常:出现了,就尽量try catch自己处理,或者抛出去。

    throw和throws的区别

    1. 从使用位置上

      • 一个在方法声明中,一个在方法体内
    2. 从作用上

      • throws表示可能抛出的异常种类,throw时一定会抛出一个具体异常对象
    3. 从抛出个数上

      throws可以跟多个异常类名,用逗号隔开throw只能抛出一个确定的异常对象

    4. 从根本上
      throws表示抛出异常的一种可能性,并不一定会发生这些异常throw表示一定会抛出异常,只要是代码执行到这一句,一定会抛出

    到底是该try 还是抛呢?

    运行时异常:让异常出现,自己优化代码

    编译时异常:try catch 处理。

    自定义异常:

    自定义异常步骤:

    1. 先写个异常类继承

    继承RuntimeException :获得运行时异常

    继承Exception:获得编译时异常

    1. 写一个有参构造方法,super(massage) 用来构造自定义异常的描述信息

    2. 在使用的地方抛出比如:

      // 只要i不是1就 丢出
      if (i != 1) {
          throw new NoOneException("不是1啊");
      }
      else{
          System.out.println("你是输入的时1");
      }
      
    talk is cheap,write and optimize my code。
  • 相关阅读:
    20172332 2017-2018-2 《程序设计与数据结构》第五周学习总结
    ASL测试 课题测试博客
    20172332 2017-2018-2 《程序设计与数据结构》第四周学习总结
    大白话Docker入门(一)
    Hexo博客搭建全解
    代码查重工具sim
    virtual judge 本地部署方案
    POJ题目分类推荐 (很好很有层次感)
    解决Ubuntu下Sublime Text 3无法输入中文
    [pascal入门]数组
  • 原文地址:https://www.cnblogs.com/xiongzk/p/14289650.html
Copyright © 2020-2023  润新知