异常

1.异常概述与体系结构

1.1.异常概述

在JAVA语言中将程序执行中发生的不正常情况称为“异常”
Java程序在执行过程中所发生的异常事件可以分为两类:
(1)Error:Java虚拟机无法解决的严重问题,如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowErrorOOM(OutOfMemoryError),一般不编写针对性的代码进行初拉力
(2)Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理,例如

  • 空指针访问
  • 视图读取不存在的文件
  • 网络连接中断
  • 数组角标越界
    捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生,比如:除数为0,数组下标越界等
    分类:编译时异常和运行时异常

1.2.体系结构

  • java.lang.Throwable
    • java.lang.Error
    • java.lang.Exception
      • 编译时异常(checked)
        • IOException
          • FileNotFoundException
        • ClassNotFoundException
      • 运行时异常(unchecked)
        • NullPointerException
        • ArrayIndexOutOfBoundException
        • ClassCastException
        • NumberFormatException

2.异常处理机制

在编写程序时,经常要在可能出现错误得到地方加上检测的代码,如进行x/y运算时,要检测分母为0,数据为空,输入的不是数据而是字符等,过多的if-else分支会导致程序的代码加长、臃肿,可读性差,因此采用异常处理机制
Java的异常处理机制,是将异常处理的程序代码几种在一起,与正常的代码分开,使得程序简介、优雅,并易于维护
使用try-catch-finally处理编译时异常,使得程序在编译时不再报错,但是运行时仍可能报错,相当于使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现
开发中,由于运行时异常比较常见,所以通常就不针对运行时异常编写try-catch-finally,针对编译时异常,一定要考虑异常的处理

2.1.机制一:try-catch-finally

try{
  // 可能出现异常的代码
}catch(异常类型1 变量名1){
  // 处理异常的方式1
}catch(异常类型2 变量名2){
  // 处理异常的方式1
}catch(异常类型3 变量名3){
  // 处理异常的方式1
}finally{
  // 一定会执行的代码
}

(1)其中finally是可选的
(2)使用try将可能出现异常的代码包裹起来,在执行过程中一旦出现异常,就会生成一个异常类的对象,并根据此对象的类型,去catch中进行匹配
(3)一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理,一旦处理完成,就跳出当前的try...catch结构(未写finally的情况下),继续执行其后的代码
(4)catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下均无所谓,如果满足子父类关系,则子类在上,父类在下
(5)输出异常信息有两种方式:

  • String getMessage();
  • void printStackTrace();
    (6)在try结构中声明的变量,在出了try结构以后,就不能再被调用
    (7)finally中声明的是一定会被执行的代码,即使catch中又出现异常,try中有return语句,catch中有return语句等情况,finally中内容也一定会被执行,如果finally中有return,则执行finally中return
    (8)像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动回收的,必须手动进行资源释放,此操作需要声明在finally之中

2.2.机制二:throws + 异常类型

throws + 异常类型写在方法的声明处,指明此方法执行时,可能会抛出的异常类型,一旦方法体执行时,出现异常,仍会在异常代码处生成一个异常类对象,此对象满足throws后异常类型时,就会被抛出
异常代码后续的代码,不再执行

3.异常对象的产生:

(1)系统自动生成的异常对象
(2)手动生成的一个异常对象,并抛出(throw)
throw new Exception("输入的数有误");

posted @ 2021-08-10 16:49  kanaliya  阅读(258)  评论(0)    收藏  举报