1. 概述
观察如下的代码, 看有无问题:
@Test
public void exception_demo(){
int a = 10;
int b = 0;
System.out.println(a/b);
}
运行结果:
我们发现, 上述代码的第3行会报错, 即: 算术运算异常, 因为除数是不能为零的. 而在我们编写程序的时候, 可能会有很多的问题存在, 为了将来方便的表示这些问题的原因, 类型, 位置, Java就提供了异常对象供我们使用. 即: Java中的异常指的是程序出现==不正常==的情况.
2. JVM的默认处理异常的方式
如果出现了问题, 我们自己没有处理, JVM会采用自动的处理方法, 它会把异常的类型, 原因, 位置直接打印到控制台上, 后边的代码是不能执行的.
3. 自己处理异常
3.1 抛出异常:throws
抛出 由更高级的调用者完成异常处理
写一段代码演示异常
==parse==有一道红线,且鼠标放上去有提示说你要==添加异常==在你的方法上。
此刻我们点击后面的more actions
选择第一个,代码变为
@Test
public void doThrowException() throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");
Date d1 = sdf.parse("2022-12-1");
}
在方法后面加上了 ==throws ParseException==
这就是抛出了异常,由方法调用者再去处理这个异常。
3.2 捕获异常:try...catch...finally
try{
尝试执行的代码
}catch{
出现异常后处理异常的代码
}finally{
处理完成后,无论是否有异常都要执行的代码
}
同一段代码,还是鼠标放在红线单词上方,点击more actions,选择第三项,Surround with try/catch
这样出来的效果是只有try...catch..
@Test
public void doThrowException() {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd");
try {
Date d1 = sdf.parse("2022-12-1");
} catch (ParseException e) {
e.printStackTrace();
}
}
代码不会报错
try...catch...finally的快捷键
Ctrl+Alt+t
这个界面我们可以清楚的看到有 6.try catch 8.就是try catch finally
4. 思考题
finally里边的代码真的永远会执行吗?
出现非运行时异常时不可能执行finally
如果手动结束,也不会执行finally中的指令
运行时异常出现,或者不出现异常时,都会执行finally