工作中需要用到的Java知识(异常篇)

工作中需要用到的Java知识(异常篇)

异常

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

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

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

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

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

RuntimeException运行时异常
ArithmeticException计算时异常(运算条件出现异常)
ArrayIndexOutOfBoundsException数组下标越界异常
IllegalArgumentException非法数据异常(方法参数不合法抛出)
NullPointerException空指针异常
NumberFormatException数字格式异常(将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常)
ArrayStoreException数组存储异常(试图将错误类型的对象存储到一个对象数组时抛出的异常)
IOExceptionIO异常
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则一定抛出了某个异常对象。

查看下一篇请戳这里↓
工作中需要用到的Java知识(多线程篇)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值