Java 异常处理
任何一种程序设计语言设计的程序在运行时都有可能出现错误,例如:除数为0,数组下标越界,要读写的文件不存在等
捕获错误最理想的是在编译期间,但有的错误只有在运行时才会发生
对于这些错误,一般有两种解决方法:
- 遇到错误就终止程序的运行
- 由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理
异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”
Java中的异常用于处理非预期的情况,如文件没找到,、网络错误、非法参数
Java程序运行过程中所发生的异常事件可分为两类:
- Error:JVM系统内部错误、资源耗尽等严重情况
- Exception:其他因编程错误或偶然的外在因素导致的一般性问题,例如:
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
异常处理机制
在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行x/y运算时,要检测分母为0,数据为空,输入的不是数据而是字符等。过多的分支会导致程序的代码加长,可读性差。因此采用异常机制。
Java 异常处理:Java采用异常处理机制,将异常处理的程序代码集中在一起,与正常的程序代码分开,使得程序简洁,并易于维护
Java 提供的是异常处理的抓抛模型。
Java 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给 Java 运行时系统,这个过程为抛出(throw)异常。
如果一个方法内抛出异常,该异常会被抛出到调用方法中。如果异常没有在调用方法中处理,它继续被抛出给这个方法的调用者。这个程序将一直继续下去,直到异常被处理。这一过程称为捕获(catch)异常。
如果一个异常回到 main()
方法,并且 main()
也不处理,则程序运行终止。
程序员通常只能处理 Exception,而对 Error 无能为力
捕获异常
1 | try{ |
声明抛出异常
声明抛出异常是Java中处理异常的第二种方式
如果一个方法(中的语句执行)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显式地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理
在方法声明中用 throws
子句可以声明抛出异常的列表, throws
后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
1 | public void readFile(String file) throws FileNotFoundException{ |
重写方法声明抛出异常的原则:重写方法不能抛出比被重写方法范围更大的异常类型,即子类不能抛出比父类方法更大范围的异常
人工抛出异常
创建用户自定义异常类
用户自定义异常类 MyException
,用于描述数据取值范围错误信息。用户自己的异常类必须继承现有的异常类。
- 本文作者: Kelly Liu
- 本文链接: http://tiantianliu2018.github.io/2019/10/11/Java-异常处理/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!