异常分类
异常类
Throwable是所有异常类的超类。下面介绍几种Throwable类中的方法,在我们捕获(catch)异常时可以使用这些方法进行处理。
方法名 | 说明 |
---|---|
public String getMessage() | 返回此 throwable 的详细消息字符串 |
public String toString() | 返回此可抛出的简短描述(异常类名+信息) |
public void printStackTrace() | 把异常的错误信息输出在控制台(最全的) |
异常的处理
(一)JVM默认处理
1、自动的把异常的名称,错误原因及异常出现的位置等信息输出在了控制台。
2、程序停止执行。
缺点就是程序会在异常处停止执行,我们想让出异常的程序也能一直运行下去。
(二)自己手动处理
手动处理,需要知道将要出现的异常类名。
通过查询可以知道该异常类是属于RuntimeException类还是属于非RuntimeException类。
1、try-catch方式
可以使程序继续运行,不会停止执行。
当循环内的代码出现异常,需要结束循环时,将try代码块放在循环外;
当循环内的代码出现异常,需要继续执行循环时,将try代码块放在循环内。
当try代码遇见循环输入时:nextInt方法不会清除缓存流,在catch中使用next或者nextLine一类会清除缓存流的方法就好了。你的Scanner估计就在循环外部new了一次,当然开始循环后就不会有输入的机会了,把Scanner实例话的语句写到try里去就好了。
格式:
try {
可能出现异常的代码;
} catch(异常类名 变量名) {
异常的处理代码;
}
示例:
public class ExceptionDemo01 {
public static void main(String[] args) {
System.out.println("开始");
method();
System.out.println("结束");
}
public static void method() {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
System.out.println("这里能够访问到吗");
} catch (ArrayIndexOutOfBoundsException e) {
// System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");
e.printStackTrace();
}
}
}
2、throws方式
格式
public void 方法名() throws 异常类名{
出现异常的代码;
}
throws格式是跟在方法的括号后面的
3、编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理。
4、处理异常最终还是要使用try-catch语句,throws只是把异常从产生异常的方法中抛出,并没有解决异常。
throw
throw用于在方法体内部主动抛出异常对象,该异常对象可以是Java中预定义的异常,也可以是我们自定义的异常。(就是说这个地方本来没有异常,我们用throw关键字给它加个异常)
格式
throw new 异常类名();//在执行到该语句时就会出现以该异常类命名的异常
如果该方法体内部有throw抛出异常,那么有两种处理方法。
方法一:在方法体内部直接使用try-catch语句处理异常。
方法二:在该方法声明后使用throws抛出异常,在调用方法时再使用try-catch语句处理异常。
throws与throw的区别
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XgEOzsUv-1679710883178)(D:\00-Study\Java\Java记录\img\throws与throw.png)]
自定义异常类
当Java中预定义的异常类无法满足我们需要时,我们就可以自定义一个新的异常类使用。
格式
public class 异常类名 extends Exception{
无参构造方法;
带参构造方法;
}
由于继承了Exception类,Exception类又继承了Throwable类,因此我们自定义的异常类对象也可以使用Throwable类中的成员方法。