目录
1.异常分类:异常分为编译时异常和运行时异常
编译时异常:是Exception类及其子类。顾名思义,就是编译的时候出现错误,必须显示处理,否则程序就会放生错误,无法通过编译。
运行时异常:都是RuntimeException类及其子类。就是在运行阶段会出现错误,无需显式处理
2.异常的处理方式
1.JVM处理异常。
如果程序出现了错误,而我们却没有进行处理,那么JVM就会做默认的处理。
JVM处理异常步骤如下:1.将异常的名称以及原因和出现异常的位置等等信息打印在控制台
2.使该程序停止运行
2.用throws关键字处理异常。
解释:通过在方法名后面加上throws + 异常类名,说明该方法会可能会抛出异常,然后将处理异常的责任交由调用该方法的代码进行处理或者继续向上抛出异常
定义格式:public void 方法名() throws 异常类名{}
注意事项:1.throws关键字是跟在括号后面的
2.编译时异常必须要进行处理,两种处理方案,try...catch...finally或者使用 throws关键字
3.如果异常为运行时异常,则方法后面可以不使用throws,交给JVM默认处理
示例代码如下
public static void test() throws FileNotFoundException {
File file = new File("D:\\java");
FileInputStream fileInputStream = new FileInputStream(file);
}
3.throw关键字
格式:throw new 异常类名();
注意:throw是在方法类使用,表示当前代码手动的抛出一个异常,如果调用者没有进行了相应的处理,那么下面的代码就不会运行了。
示例代码如下:
public static void test(){
for (int i=1;i<10;i++){
if (i==5){
throw new RuntimeException();
}
}
System.out.println("我不会被执行了");
}
4.try-catch-finally方式处理异常
1)格式如下:
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}finally{
无论是否发生异常都会执行的代码 finally可以存在,也可以不存在
}
2)执行流程:首先会先执行try里面的代码
其次如果try里面的代码出现异常则会执行catch里面处理异常的代码
然后无论try里面是否出现异常都会执行finally里面的代码
最后程序还会继续往下执行
3)注意事项:①如果try里面没有出现异常怎么办?
如果没有出现异常,程序会正常的将try里面的代码全部执行完毕,不会执行catch里面的代码,但是一定会执行finally里面的代码
②如果try中抛出了异常,异常下面部分的代码还会执行吗?
不会,因为如果抛出异常,那么就会被捕捉到异常,然后开始执行 catch里面的代码,如果catch代码执行完毕,就代表整个体系执行完毕,然后继续执行下面的代码了
③如果抛出的异常没有被捕捉,那么程序会如何运行?
如果没有被捕捉,那么就相当于我们没有对异常进行处理,还是会交给JVM帮我们进行默认处理
④同时可能会出现多个异常怎么处理
如果可能会出现多个异常,那么我们可以多写几个catch。但是必须注意如果异常之间存在子类父类的关系,子类一定要写在父类的上面
示例代码如下
public class Temp {
public static void main(String[] args){
test();
}
public static void test(){
try {
int[] arr={1,2,3};
System.out.println(arr[3]);
System.out.println("是否能够访问到");
}catch (ArrayIndexOutOfBoundsException e){
System.out.println("处理完毕");
}finally {
System.out.println("我一定会被执行");
}
System.out.println("今天星期几");
}
}
执行结果如下: