JAVA——异常Throwable、抛出异常Throws、异常处理try-catch、制造异常Throw、自定义异常类
JAVA——异常Throwable、抛出异常Throws、异常处理try-catch、制造异常Throw、自定义异常类
- 一、概念
- 1、异常Throwable
- (1)Error
- (2)Exception
- 2、抛出异常Throws
- 3、异常处理try-catch
- 4、制造异常Throw
- 5、自定义异常类
- 二、应用举例
- 在使用JDBC操作数据库时的异常处理
一、概念
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处理:
加上异常处理之后的代码如图所示,这样即使产生错误,程序也会继续执行,并输出相应的异常信息提示。
原文地址: https://blog.csdn.net/weixin_56039103/article/details/124278377
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章