异常
程序出现了问题
如何学习异常?
1、异常体系
(1)异常类
在Java中,定义了很多类,用来描述错误(异常)信息
NullPointerExcption:异常类,空指针异常
IndexOutofBounds:异常类,数组越界
…
在Java中,如果程序出现了异常,Java会定义很多异常类,用来描述异常相关信息
所有异常类合在一起,就叫做异常体系
(2)
—|Throwable:所有异常类的父类
------|Error:错误,一般不能通过代码解决的问题(CPU烧坏了,硬盘损坏了)
------|Exception:异常(平时说的异常)
---------|空指针异常
---------|数组越界异常
---------|…
(3)Exception
分成两大类
非运行时异常(编译时异常):在编译阶段就会出现的问题
运行时异常:运行时出现的问题
编译时异常:
ClassNotFoundException
运行时异常:
在运行时抛出异常
2、常见的异常类
ArrayIndexOutOfBoundsException:数组越界
使用的索引值超过了数组最大索引值
NullPointerException:空指针异常
变量指向了null(变成了空的),又使用空的变量去访问数据
ArithmeticExcepton:算术异常
进行运算的时候
…
3、Throwable
常用方法:
String getMessage():获取异常信息
void printStackTrace():打印异常信息(默认打印到控制台)
void printStackTrace(PrinStream s):把异常信息打印到指定位置
4、异常的处理(重点)
如果不处理异常,程序就直接结束了,体验差
解决:
对可能出现问题的代码,进行异常处理
效果:
处理的代码出现问题,不会影响后面的代码执行
(1)捕获异常
try{
//可能出现问题的代码
}catch(异常类型 变量名){
//捕获异常,做相应的处理
}catch(异常类型 变量名){
}...
catch(参数):
参数:捕获什么异常
注意:如果捕捉多个异常,顺序一定是从小到大(从子类到父类)
需求:
代码一定要执行(资源释放)
try{
//可能出现问题的代码
}catch(异常类型 变量名){
//捕获异常,做相应的处理
}finally{
//对于不管是否有异常都需要运行的代码,写在finally中
}
(2)抛出(声明)
关键字:
throws
作用:
在方法上声明异常类型(我如果有问题,调用者就会收到问题)
效果:
如果方法中出现了异常,可以不管,直接抛给调用者处理
格式:
public void test() throws Exception{
}
(3)throw抛出
手动抛出异常对象
格式
throw new 异常对象;
例如:
int a = 1/1;
throw new Exception();
使用:
手动抛出自定义异常
5、自定义异常类
自定义异常类:
无法自动抛出
格式:
//创建类,继承Throwable
public class MyException extends Throwable{
public MyException(String msg){//msg:异常描述信息
super(msg);
}
}
如果自定义了一个异常类,不去手动的抛出,永远无法使用