1.异常概述
- 错误可以产生于程序员没有预料到的各种情况或者是因为超出程序员控制之外的环境因素、
- Java中程序运行时产生的一些错误称之为异常
- 异常时一个程序执行期间发生的事件,它中断了正在执行的程序的正常指令流
2.错误(Error)
- 错误不是异常,是脱离程序员控制的问题
- Throwable类的子类
- Throwable的两大子类 Exception Error
3.捕捉异常
try,catch,finally
try 捕获异常(存放可能发生异常的Java语句)
catch 处理异常(捕获异常后处理的代码) Exception超类处理各种异常
finally 处理异常的信息(资源的释放代码)
4.java中常见的异常
- 类型转换异常 ClassCastException
- 为找到相应的类 ClassNotFountException
- 算术异常 ArithmeticException
- 数组下标越界 ArrayIndexOutOfBoundsException
- 数组中包含不兼容的值抛出异常 ArrayStoreException
- 操作数据库异常 SQLException
- 空指针异常 NullPointerException
- 字段为找到异常 NoSuchfieldException
- 方法为找到异常 NoSuchMethodException
- 字符串转换为数字抛出异常 NumberberfomatException
- 数组元素个数为负数抛出异常 NegativeArraysizeException
- 字符串索引超出范围抛出异常 StringIndexOutOfBoundsException
- 输入输出异常 IOException
- 不允许访问异常 IllegalAccessException
当应用程序试图使用class类中的newInstance()方法创建一个类的实例化,
面指定的类对象无法实例化是抛出该异常 InstantiationException
- 文件已结束异常 EoFException
- 文件为找到异常 fileNotFoundException
5.自定义异常
自定义异常的步骤
- 创建自定义异常类
- 在方法中通过throw关键字抛出异常
- 如果当前抛出异常的方法中处理异常,可以使用try-catch语句
- 捕获并处理异常否则在方法的声明处通过throws关键字
- 指明要抛出给方法调用的的异常
- 在出现异常方法的调用者中捕获并处理异常
6.使用异常的原则
- 过多的使用异常会给系统增加负担
- 在方法中使用try-catch捕获异常时,要对异常进行处理
- try-catch语句块的范围不要太大,不利于对异常的分析
- 一个方法被覆盖是,覆盖它的方法必须抛出相同的异常或子异常
捕获的异常要有意义
7.运行时异常
RuntimeException异常时程序运行过程中产生的异常
非运行时异常(程序员无法预见的)
运行时异常(可能被程序员避免的异常)
- Throwable类的两个派生子类 Exception Error
- Error类及其子类用来描述Java运行系统中内部错误以及资源耗尽的错误,这类错误比较严重
- Exception类称为非致命性类,可以通过捕捉处理使用程序继续执行。
- Exception类又根据错误发生的原因为RuntimeException异常和RuntimeException之外的异常
其余异常参考API中的Exception类的子类
- Unchecked Exception 不受检查异常
- Checked Exception 检查异常
8.使用throws抛出异常
抛出多个异常时使用逗号分隔
static void pop() throws NegativeArrarySizeEception{
//语句块
}
public static void main(String [] args){
try{
pop();//调用方法
}catch{NegativeArraySizeEception e){
System.out.println("pop()方法抛出异常");//输出异常信息
}
}
9.使用throw语句抛出异常
throw关键字通常用于方法体中,并抛出一个异常对象。程序在执行到throw语句时终止 后面的语句都不执行
通过throw关键字抛出异常后,如果想在上一级代码中捕获并处理捕获的异常,则需要在抛出异常的方法中使用throws关键字在方法的声明中指明要抛出的异常