学习参考文章:Java:详解Java中的异常(Error与Exception)
1. 异常的概述
Throwable是所有异常的父类,其中关系如下图所示:
2.JVM默认的方案
如果程序出了问题,我们并没有做过多的处理,最终JVM会默认的处理:
1.把异常的名称,异常的原因以及异常出现的位置输出在控制台中。
2.程序将会终止执行
3.异常的处理
1.try…catch
2.throw抛出异常
4.异常的处理之try…catch
5.Throwable成员方法
当程序报错时,我们在控制台看到的异常消息,主要就是根据这些方法进行打印的。
6.异常的分类(重点)
java中的异常主要分类两大类:编译时异常和运行时异常,也被称为是受检异常和非受检异常。
注:所有的RunTimeException类以及其子类被称为运行时异常,其他为非运行时异常。
编译时异常:必须显示处理,否则程序就会发生错误,无法通过遍历。举个例子:就好像调用某些方法,会出现类型的错误,也可能方法返回的类型和你传递的类型不一致,这个时候就会爆红,你不处理这个异常,你的程序就无法通过编译,也就无法运行。
运行时异常:无需显示处理,也可以和编译时异常一起处理。举个例子:运行时异常就是指程序在运行期间出现的错误,在编译期间没有出现错误,程序成功运行了,但是报出了一些异常。
7.异常的处理之throws
虽然通过try…catch可以对异常进行处理,但是并不是所有的情况我们都有权限进行异常的处理,也就是说,有些时候可能有一些异常我们是处理不了的,这个时候,我们就需要使用java中的throws处理方法,将异常抛出,将这个异常的具体处理交给使用这个方法的人来进行。
格式:
throws 异常类名
注意:这个格式是跟在方法的括号后的
public class ExceptionDemo {
public static void main(String[] args) {
System.out.println("开始");
// method();
try {
method2();
}catch (ParseException e) {
e.printStackTrace();
}
System.out.println("结束");
}
//编译时异常
public static void method2() throws ParseException {
String s = "2048-08-09";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(s);
System.out.println(d);
}
//运行时异常
public static void method() throws ArrayIndexOutOfBoundsException {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
}
}
重点:
1.编译时异常必须要进行处理,两种处理方案:try…catch或者throws,如果采用了throws这种方案,将来谁用谁就来处理这个异常。
2.运行时的异常可以不处理,出现问题后,就需要我们回来修改代码。
8.throw和throws的区别
9.自定义异常
在实际的开发过程中,我们可以自定义异常类,通过继承其他的异常类,并使用父类的构造方法,或者重写自己的方法,实现特有的功能。