JAVA基础语法:认识异常

一.认识异常

1.1什么是异常

异常:程序没按照预计的结果运行,在运行的过程中发生了“错误”
在这里插入图片描述

1.2异常的基本语法

try{
//可能会产生异常的代码,除0异常,数组越界,空指针等
}[catch…0…n]{
//出现异常以后如何处理
}[finally]{
//异常的出口,最终会执行的代码块
}
1.程序中不处理异常,发生异常之后的代码就不再执行在这里插入图片描述
2.使用try…catch…处理异常在这里插入图片描述
在这里插入图片描述
3.java中一切都是类,异常其实也是类,依次Catch代码块只能捕获相应的异常类型 。
此时代码出错的原因在于空指针异常,不属于数组越界异常,因此catch代码块无法处理=>需要多个catch代码块
在这里插入图片描述
在这里插入图片描述
有一个异常类是所有异常类的父类,Exception
我们如果catch块中捕获的是Exception这个类型,就可以接收到所有异常类型。(不推荐)
在这里插入图片描述
a.若此时明确知道try中可能产生的异常类型,数组越界,空指针,catch就捕获明确的相关类型。
b.若此时不要清楚可能产生哪些异常,就使用Exception这个共同的父类,所有异常的子类都会向上转型变为Exception的引用。

1.3关于错误堆栈信息:

e.printStackTrace():打印异常出现的位置以及原因
在这里插入图片描述

1.4关于finally代码块:

无论是否有异常产生,最终都会执行finally代码块中的代码
在这里插入图片描述
一般来说资源的释放,方法的关闭操作都在finally代码块中。
比如关闭数据库的连接,关闭文件的操作都在finally代码块中,无论是否有异常产生,都会保证资源正确释放。

finally无论如何最终都会执行的代码块,若finally存在返回值,覆盖掉try或者catch中的返回值
在这里插入图片描述
不要在finally代码块中写返回值
在这里插入图片描述

1.5异常的执行流程:

fun方法内部并没有处理这个异常,产生异常之后向上抛出,抛给调用者。
此时主方法中也没有处理异常,继续向上抛出异常,抛给主方法的调用者JVM
在这里插入图片描述

1.6throws和throw关键字-人为抛出异常

throws:用在方法声明上,表示该方法可能会产生的异常类型,但是本方法中不处理该异常。若异常产生,抛回给调用者。在这里插入图片描述

throw:用在方法内部,表示人为产生异常对象并抛出。
异常对象的产生都是发生异常后由JVM产生的,若需要人为产生异常对象,就使用throw关键字

自己产生了一个空指针异常并抛出:
在这里插入图片描述
关于这两个关键字的使用,需要结合自定义的异常类来使用。

1.7异常体系

异常体系:JDK内部异常的继承关系
java中的异常分为两大类,一类称之为受查异常,另一类称为非受查异常

在这里插入图片描述
RuntimeException以及其子类包括Error及其子类称为非受查异常,编译阶段可以不显示进行异常处理(try…catch/throws抛出)
RuntimeException(运行时异常,编译阶段不报错,运行时出错,常见的异常有:ArryIndexofBoundsException-数组越界异常,NullPointerException-空指针异常,ClassCastException-类型转换异常)
Error-程序内部错误,一般来说,出现这种错误,程序没法再正常执行下去了,只能退出程序。常见的Error:OutofMemoryError-堆内存溢出错误,StackOverflow-栈溢出错误在这里插入图片描述

除了非受查异常以外的其他异常类属于受查异常,必须在编译阶段显示进行异常的处理,否则编译就会报错
在这里插入图片描述
在这里插入图片描述
显示处理有两种方式:1.进行try…catch捕获这个异常在这里插入图片描述
2.调用者也使用throws向上抛出异常在这里插入图片描述

1.8自定义异常

自定义异常:JDK内部已经帮我们提前定义好了很多异常类,但是在某些业务场景下,出现的错误需要我们自定义异常类(用户登录,用户名不对,密码不对这种错误就需要我们来自定义异常类)
自定义异常类非常简单,只需要继承两个父类就可以
若希望这个异常必须显示处理-继承Exception父类
若这个异常不需要显示处理-继承RuntimeException父类在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值