工作中需要用到的Java知识(五)

工作中需要用到的Java知识(五)

异常

今天来复习一下异常的内容,在工作中,我们经常会碰到异常,菜鸟教程将异常分为了:

·检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
·运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
·错     误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

我自己理解的话,这三种异常分别为:
检查性异常:可以在编码时被自动检测出来的错误。
运行时异常:需要运行起来才会被发现的异常。
错 误:是不受代码与程序员控制的错误。

接下来介绍一下异常的家族:
异常家族
这里Throwable类为所有异常类型的父类,他的子类分为错误异常。异常下又分为IO异常(检查性异常)运行时异常

接下来我将平时可能用到的异常列举一下:

RuntimeException 运行时异常
ArithmeticException 计算时异常(运算条件出现异常)
ArrayIndexOutOfBoundsException 数组下标越界异常
IllegalArgumentException 非法数据异常(方法参数不合法抛出)
NullPointerException 空指针异常
NumberFormatException 数字格式异常(将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常)
ArrayStoreException 数组存储异常(试图将错误类型的对象存储到一个对象数组时抛出的异常)
IOException IO异常
ClassNotFoundException 找不到类异常
IllegalAccessException 非法访问(拒绝访问一个类的时候,抛出该异常)
InstantiationException 实例化异常(当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常)
NoSuchFieldException 请求的变量不存在
NoSuchMethodException 请求的方法不存在
FileNotFoundException 找不到文件异常

异常方法在菜鸟教程中有,我就不过多说了,在工作中用到的最多的可能就是 public void printStackTrace() 方法了吧。

注意:
在上面的表格中提到了newInstance方法实例化,他与new是一样的,newInstance方法用在反射,我查了一下,好像新版本下也不太使用了,知道一下就行,newInstance方法与new区别在于:
newInstance: 弱类型。低效率。只能调用无参构造。
new: 强类型。相对高效。能调用任何public构造。

接下来再说一下异常应该怎么使用:

1.try…catch
try...catch捕获异常

2.当我们有必要执行的内容时可以添加finally,finally部分代码不管有没有捕获异常都会执行

try...catch...finally

可以使用多个catch分别捕获不同的异常。
多个catch进行捕获

throw与throws的区别

throw关键字可以由程序员自己主动抛出一个异常并进行捕获。
手动抛出异常

throws在方法名类名后面抛出异常,在工作中一般为检查性异常,当我们使用方法时,可能某个方法需要抛出这个异常,将其忽略。

我们来举一个例子:
创建文件流报错

当我们创建文件流的时候发现在类名下有条红线,这说明有检查性错误,让我们来看一下源码:
文件流源码

在源码中这个方法抛出了找不到类异常,所以在使用中,我们也需要抛出这个异常,如下图:
正常格式

此时我们就看不到检查性异常了,程序也可以正常进行。

总结:
throws表示出现异常的一种可能性,并不一定会发生这些异常,;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。

猜你喜欢

转载自blog.csdn.net/weixin_49290171/article/details/113858356