JAVA——异常Throwable、抛出异常Throws、异常处理try-catch、制造异常Throw、自定义异常类

一、概念

1、异常Throwable

分类

(1)Error

内存不足,硬盘损坏等问题
举例:
内存溢出错误-OutOfMemoryError
如图所示写了个死循环,一直做字符串拼接,Java程序就会报错,提示内存溢出
在这里插入图片描述

(2)Exception

分为:运行时异常(RunTimeException)、非运行时异常
运行时异常举例:
1.算术错误异常-ArithmeticException
0不能作为被除数,不运行时程序逻辑语法是没有问题的,所以不会报错,但运行之后就会报错,提示ArithmeticException,这是Java中自带的异常分类,即告诉我们,出现的异常属于算术错误问题。
在这里插入图片描述

2.数组下标越界异常-ArrayIndexOutOfBoundsException
定义了长度为2的数组,然后输出数组中下标为5的元素,超出了数组的长度,所以程序提示ArrayIndexOutOfBoundsException,即,数组下标越界异常
在这里插入图片描述

3.空指针异常-NullPointerException
即,找不到对应元素。定义的元素初值为null,这个时候是没办法得到它的长度的,所以会报空指针异常。
在这里插入图片描述

4.数据格式转换异常-NumberFormatException
在这里插入图片描述

2、抛出异常Throws

例:如果一个方法可能出现异常,就可以用Throws声明,把异常抛给方法的调用者

/**
* 使用throws方法声明该方法有异常,把异常抛给方法的调用者
*/
public static void fun2() throws Exception {
int n = 1/0;
}

此时如果调用fun(2)方法,就会有异常,如图所示,在fun(1)方法中调用声明了异常的fun(2)方法,方法调用处标红报错了。
在这里插入图片描述

如提示所示,有两种处理方式:
第一种:继续向上抛出异常。也就是在方法后加【 throws Exception 】。如图所示,此时fun(2)方法调用处不再标红报错,但如果fun(1)方法被调用,仍然会报错。
在这里插入图片描述
第二种:异常处理。方法的异常不能永远往上抛,就需要在某一步使用【try-catch】语法进行异常处理。

3、异常处理try-catch

以上面的例子为例,选择第二种解决方案,使用【try-catch】语法进行异常处理,程序不再报错,如图所示:
在这里插入图片描述
完整的异常处理语法是这样的:

try {
			可能出现异常的代码
	}catch(要处理的异常类型 参数) {
			如果try出现异常就执行这行带代码
	}catch(要处理的异常类型 参数) {
		如果try出现异常就执行这行带代码
	}
		...
	finally {
		无论try成不成功,这一行代码都会被执行
	}

异常处理的作用是,在程序可能发生异常时,人为地设定另一种方案(即catch大括号里的内容),让程序能够继续走下去,不至于因为某一步的异常导致接下来的程序都无法执行。

4、制造异常Throw

语法:制造非运行时异常,必须加try-catch异常处理,否则会直接编译报错;制造运行时异常,则只有在运行程序时才会报错。

try {
	throw new Exception("我是一个被制造的异常");
}catch(Exception e) {
	e.printStackTrace();
}

throw new RuntimeException("我是一个被制造的运行时异常");

5、自定义异常类

实际开发中,Java中自带的异常类可能不足以满足使用,我们可以通过自定义异常类来解决这个问题。
例如:打游戏这个过程中,可能会发生电脑蓝屏、电脑冒烟两种异常,我们可以自定义这两种异常,代码如下:
电脑蓝屏异常:
在这里插入图片描述
电脑冒烟异常:
在这里插入图片描述
两个异常类已经定义好了,接着去写一个游戏类,在类里写一个play方法,在调用这个方式打游戏时,会随机产生三种结果:电脑蓝屏、电脑冒烟、打游戏ing…
在这里插入图片描述
最后新建一个主类,实例化一个Game对象,调用它的play()方法,测试我们定义的异常是否生效:
第一次点击运行程序:
随机结果是没有产生异常,游戏赢了。
在这里插入图片描述

第二次运行,产生了冒烟异常,自定义的异常类MaoYan输出了报错提示:电脑冒烟了
在这里插入图片描述

二、应用举例

在使用JDBC操作数据库时的异常处理

使用JDBC操作数据库时,【注册驱动】、【连接数据库】、【sql预编码】、【执行sql】、【关闭连接】这几步,这些方法在在Java源程序中都被声明了异常,即,如果调用这些方法,程序可能发生异常。
如果不进行异常处理,就会产生非运行时异常,即程序直接标红报错,如图所示:
在这里插入图片描述
任意选择一个,如【连接数据库】,鼠标放到红框中的getConnection处,按住CTRL键,点击鼠标左键,查看Java源程序中定义的DriverManager类下的getConnection方法,如图所示,被声明了异常:
这是因为连接数据库提供的信息可能有错误,就会连接数据库失败。
在这里插入图片描述
那么我们就需要对这些可能产生的异常进行try-catch处理:
加上异常处理之后的代码如图所示,这样即使产生错误,程序也会继续执行,并输出相应的异常信息提示。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_56039103/article/details/124278377