【急速通关!从零开始学Java-------异常】

算数异常

在这里插入图片描述

在这里插入图片描述

数组下标越界异常

在这里插入图片描述

在这里插入图片描述

空指针异常

在这里插入图片描述
在这里插入图片描述

如何理解异常

其实异常就是一个又一个类 所以这些类是有一个继承关系的

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

异常的处理

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

异常的抛出(throw关键字)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可以借助throw关键字手动抛出异常
同样是抛出异常 之前提到的算数异常是编译器抛出的 而上面这个是由程序员手动借助代码抛出的

一般借助throw抛出的异常 以自定义异常为主
在这里插入图片描述

异常声明throws在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以继续通过throws 使编译通过将异常交给JVM处理
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
解析:
当程序确实抛出了异常才会被catch捕获 并运行其后面的代码块 如果
在这里插入图片描述
在这里插入图片描述

如果改为
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

关于try catch()详解

在这里插入图片描述

在这里插入图片描述

对于这样一个代码 由于越界会导致异常 并且下面那句也不会执行
此时我们可以通过try catch()来使下面一句可以执行
在这里插入图片描述
在这里插入图片描述

如果仍然希望打印错误信息 则可以调用printStackTrace()方法
在这里插入图片描述
在这里插入图片描述

注意是先打印了after 后面才打印错误信息

也可以一个try写多个catch()
在这里插入图片描述

但注意不会同时抛出多个异常 比如这个try中其实两个异常都出现了 但是由于先catch到了数组越界异常 后面的空指针异常的catch就不会执行了
在这里插入图片描述

也可以这样写 但不建议
在这里插入图片描述

在这里插入图片描述

程序终止

finally

finally中的代码块不管是不是发生了异常 都会被执行
那么要finally 干什么呢?
finally一般用于资源的释放在这里插入图片描述

举例
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

发现当我们传参没有出现异常时 try catch 结构之后的语句没有被执行
当我们输入不是10 是abc时
在这里插入图片描述
在这里插入图片描述

传参错误时 try catch 结构之后的语句才被执行

但有些资源必须被关闭 所以 需要finally
在这里插入图片描述

也可以写在try的括号里 这样finally里就不用写关闭的了

关于finally是最后执行
在这里插入图片描述

结果为在这里插入图片描述

因为 finally是一个善后工作 是在最后实施的 也就是说即使try中已经return了但仍然要运行finally中的代码块

总结一下 try catch 结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

也就时说 try中会直接运行

  1. 有异常并且被成功捕获 则会运行完catch中的代码块之后把结构后面的代码块也给执行了
  2. 有异常但是没有成功捕获 就会报错误信息 结构后面的代码块不会被执行
  3. 有finally时 try中代码有return
    1. 没有异常时 由于try中含有return 则直接return 不会运行结构后面的代码块 但会运行f代码块
    2. 有异常并且成功捕获时 则会将结构中和结构后面的全部执行了(因为try中出现异常肯定在return一句之前 所以try没有return 所以结构后面的代码会被执行)

throw和throws的区分

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

自定义异常类

先看一下编译器自带的异常是怎么写的

在这里插入图片描述

照葫芦画瓢写一个用户名异常
在这里插入图片描述

借助throw抛出

在这里插入图片描述

但是 如果继承于Exception 则会报错
在这里插入图片描述

错误在这里:
在这里插入图片描述

在这里插入图片描述

原因是两个父类代表不同的异常
受查异常在编译时就会报错
在这里插入图片描述

受查异常在编译时 必须处理之后才能编译通过 可以借助try catch结构解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值