概念:就是程序出现的一些不正常的情况。
java中将这些已经预见到的不正确的情况,封装成了类,这种类叫异常类
生成异常:
当满足了异常的条件时,会执行以下操作:
创建异常对象
抛出异常对象
执行这个两个功能后,叫做产生了异常,但是这个过程是java自动做的(java异常处理机制),我们见不到**
处理:
捕获异常
声明抛出异常
java中涉及的异常以及错误的类有一个完整和庞大的处理机制:
异常和错误的类有以下结构:
Throwable - 异常和错误的顶级父类
有两个子类: - Error:代码无法处理的错误,比如停电
- Exception:通过代码的调试可以处理的异常
这个Exception有很多的子类 - IOException,FileNotFoundException……
注意:将异常抛出去的时候,不能抛给main方法,因为处理异常的时候谁调用这个有异常的方法,谁就来处理这个 异常,main是由jvm,所以不能让jvm处理异常,所以我们通常在开发中main方法中直接处理掉。
try/catch捕获异常处理:
将异常捕获,使用try/catch做分支处理-如果存在异常就抓取并处理,如果没有异常就直接往下执行。
格式:
try{
需要检测异常的代码
}catch(异常类名 异常变量){
异常处理的代码
可以调用异常的方法
通常我们只使用一个方法:printStackTrace-打印异常信息
}
抛出异常声明处理
在某个方法声明上,让它(方法)抛出产生的异常,自己不需要处理,谁调用这个方法,谁处理这个异常
语法:方法的声明上加上throws 异常类名
比如:
方法a中产生了异常,声明抛出
方法b调用了方法a,则该异常从a到b,并且由b**
处理异常注意:
一般情况下,main方法中不能抛出异常,因为main方法的上一级是jvm,jvm的处理方式就是终止程序,这样的处理没有意义!所有main要自己处理。
多异常处理
当程序中出现多个异常的时候我们也可以进行处理
多异常处理方式一:
声明抛出异常,直接抛出多个异常
多异常处理方式二:
一个try多个catch的方式
异常处理中,java实际上是中断异常的处理方式。
运行时异常:
就是在代码运行期间出现的异常,通常在编译期是不会报错的
处理方式:
可以处理,也可以不处理 - 按照需求而定
一般情况下,遇到java自身的提供的运行时异常,都可以通过逻辑处理来解决,避免异常的产生
常见的运行时异常:空指针异常,下标越界异常,类造型异常……
处理方式;
1.声明抛出处理
2.捕获处理
注意:
在处理多个异常的时候,可以直接利用异常的父类Exception直接处理子类的异常,这个做法在语法上没问题。
但是逻辑中不能这么用,因为一旦直接使用父类处理了异常,就没有办法再去处理子类的异常。**