00015.01 异常的描述和体系结构(编译时异常、运行时异常)

一、是什么?

异常:表示不正常
在某些情况下,因为用户的一些原因,例如:配置的问题,或者错误输入的问题,比如登录的时候,程序里面要求必须是数字的,用户输入了字母和特殊符号,如果程序里面没有进行数据校验,也没有进行异常处理,就会引起程序“挂逼”
再奇葩一点的比如用户磁盘空间满了等因素导致程序无法进行运
特别注意,异常是指,如果没有用户原因,程序是可以正常运行的,如果你写的代码语法本身就有问题,编译都通不过,那不叫异常,叫语法错误
不是异常分两种:(1)语法错误 (2)逻辑错误
在这里插入图片描述

在这里插入图片描述
那什么叫异常呢?看下面这个就属于异常
在这里插入图片描述
在这里插入图片描述

Java的程序如果出现异常,并且在代码中没有做相应的处理,那么程序就会“崩溃”,“挂了”,就会起不来
那么Java如何处理呢
先了解一下Java异常处理的过程
(1)当程序运行到某一句时,发送了异常,程序会先停下来
(2)程序会在这句代码处,查看原因,生成一个合理的“异常对象”,然后“抛出”
(3)JVM虚拟机会检查在这句代码的外围,是否有try……catch 结构的语句可以捕获它,a、如果可以捕获,那么程序在处理完异常之后就会继续下面的语句,不会崩溃;b、如果不能捕获,那么就会抛给上级

比如之前的例子,我们给它添加try-catch

二、怎么用

在这里插入图片描述
在这里插入图片描述
那么即使你输错了,它也不会奔溃

在这里插入图片描述
在这里插入图片描述
注意:如果不能处理会抛给上级,上级还不能处理会逐级往上抛,但凡有一个级别处理了,就不会崩溃

三、异常的体系结构

所有类的根父类是Object
枚举的公共父类是Enum,根父类仍然是Objct
那么异常的公共父类是 Throwable
我们看API怎么说的
(1)只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。
意思就是,“抛”这个动作,只能抛 java.lang.Throwable和它的子类对象
在这里插入图片描述
从这句话我们可以看出,抛也不是什么都能抛的,
(2)catch 表示“抓”
类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
所以你不管是抓还是抛。都必须是针对java.lang.Throwable 的对象
在这里插入图片描述

2、Throwable又分为两类

(1)Error : 错误

一般指严重的错误,一般合理的应用程序不应该试图去捕获它 ,如果出现这个问题,要么需要成绩程序,要么需要升级架构,要么需要升级硬件
比如:报了一个 OutofMemoryError 内存错误 ,这种即使你try-catch 也没用,try-catch后也还是没有内存,这个时候要怎么办,要么程序升级,你的程序或者架构有问题,要么升级硬件
非常经典的代表就是 虚拟机错误 (即 VirtualMachineError 其中包含了 堆内存和 栈内存还有其它(但是比较重要的是这两个))

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

(2)Excption:指的是一般异常,合理的应用程序应该试图去捕获它

Excption的已经子类就很多了
在这里插入图片描述
但是不需要记那么多,大概知道就行了

Excption 又分为两类:

(1)运行时异常 RuntimeException

编译时,编译器不会提醒你做处理的,只有运行期间才会发生

(2)编译时异常,除了RuntimeException系列以外的,都是编译时异常,我们更常见的是编译时异常

即如下图
在这里插入图片描述
编译时异常会强制要求程序员做处理,如果你不编写就会编译不通过,
为什么会这样严重,直接就让你编译不通过,因为运行时异常是发生的可能性非常非常多的一种情况,是让程序员尽量去规避的,不是就让你去try-catch的,就好像走路一样,不是要时刻去提醒注意路况有没有车的,脚下有没有石头的,运行时异常不建议使用try……catch去处理,但是可以用
而且一般都是很不应该发生的问题,例如空指针异常,下标数组越界异常,类型转换异常,都应该靠程序员自觉去处理,这些异常程序员完全可以避免,但是要是实在没有考虑到,也可以使用try-catch

编译时异常例如 FileNotFoundException (找不到文件异常),IOException(读取数据异常) 等都强制要求你try-catch
在这里插入图片描述

总结

try-catch 是经常用的 ,这里我们主要是深入了解其原理,实际上用的时候很简单

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值