Java常用API-异常处理机制

110 阅读4分钟

1.为什么要有异常处理机制?

  • 避免一些小问题的出现而影响整个系统的运行。

2.如何避免?

  • 整理问题,进行分析,分类,进行相应的处理——作出对应处理办法——编写对应的类——编写功能处理对应问题

3.Java提供的类有哪些?

  • 异常类:Throwable 包:java.lang
  • 含义:所有错误和异常的基类,即Java中所有所有问题处理类的起源
  • 类的使用:普通的类,提供构造方法和普通处理业务的方法
    • 其直接子类:
      • 错误:Error -- 一定会出现的严重问题,必须解决该问题(修改代码)程序才能运行
      • 异常:Exception -- 应该尝试获取问题,进行相应处理,不影响整个程序运行

4.Error和Exception细化

  • Error:程序执行时一定会发生的问题(如写错代码,内存溢出等)
    • -- 发生时控制台打印出现 java.lang.XXXXError 的信息
  • Exception:程序执行时有可能会发生的问题(一般是数据和语法错误,如除数为0,数据类型不符合等)
    • --异常出现时,在我们传入正确数据的前提下,程序是可以正常运行的
    • --可以通过使用过程中编写一些算法的方式来避免错误的出现

5.提供帮助简化处理异常的方法

  • Error:无法处理,只能修改代码
  • Exception:可以处理,程序执行过程中偶然出现,去检测并避免它
    • #Java中如何处理:提供了一套处理业务代码块(catch可以通过改变出现异常对象方式同时出现多次)

try{ 可能出现异常的代码块 }catch(出现的异常对象){ 出现异常的解决方法 }finally{ 不管出不出现异常,都会执行 }

  • 使用方式:
    • try{}:主要的功能就是将可能出现异常的代码块圈起来进行监测
    • catch(异常类类型 对象名){}:当try监测到异常发生的时候,虚拟机就会创建对应异常类对象,交给catch根据类型进行捕获,将异常对象作为参数自动传入(没有该类型异常时,传入为空)
      • *自定在catch块中,自定义业务功能
    • finally{}:放在异常处理组合的最后,不管是否发生异常,它都会执行
      • *该块的作用是关闭之前开启的数据流通道 ​
  • 未发生异常--代码执行过程:直接按照代码顺序执行,不执行catch
  • 发生异常--代码执行过程:try中监测到异常发生--catch直接捕获异常,try中代码不再继续执行--执行catch块内容【异常处理】--继续向下代码执行

#try,catch,finally的组合

  • 1)一个try块对应一个或者多个catch块
    • #备注:
      • a.当try检测到一个异常发生,try中的代码块执行会直接结束并直接跳转到对应catch块执行
      • b.可以添加一个Exception对象的块来监测所有的异常对象(务必放在catch群(如果是)的最后)
      • c.catch块的执行遵循从上往下的先后顺序(异常类对象范围:父类>子类)
  • 2)一个try对应一个或者多个catch块对应一个finally块——没有异常正常执行业务,有了异常就捕获操作,最终用finally进行通道关闭
  • 3)一个try对应一个finally块——不管有没有异常都不处理,一定要关闭通道,主要目的为释放资源

6.自定义异常

  • 开发者可以将自己的想法创建为异常类,作为异常进行处理

    • #如何自定义异常:
      • 创建一个自己的类——继承一个Java异常家族中的任何一个类
      • 两个关键字:throw,throws
        • throw:抛出异常,产生异常,指定这个位置有异常发生
          • 语法:throw new 构造方法();
        • throws:与throw搭配使用,当抛出异常时,将抛出的异常在对应方法上面声明,告诉调用者这里有异常需要处理
          • 语法:方法的参数括号与方法体之间添加 throws 类(例:public void login(String uname,String upassw) throws OwnException{})
  • 说明:throw抛出的异常,在调用时可以处理,也可以继续抛出

##常见的异常问题:

  • ArithmeticException:出现数学中异常的运算条件是,例如除数为0
  • IndexOutOfBoundsException:下标索引越界
  • ClassCastException:对象类型转化问题
  • NullPointerException:空指针异常,对象没有new就去调用类信息
  • ClassNotFoundException--没有找到类,反射机制,使用第三方框架
  • NoSuchFieldException--没有这个属性
  • NoSuchMethodException--没有这个方法
  • IOException:文件处理,读取的文件不存在,格式不对等等