Java异常原理分析
异常概要
异常是不正常的意思,Java中的异常是指程序发生了错误,或者程序出现了异常的状况。 例如,classnotfoundexception/nullpointexception ()类找不到异常和空指针异常) )。
异常的继承体系
之前学习了集合,从集合的继承体系中学习了。 也就是说,从根部开始学习。 例如,Collection和Map是集合的根。 继承体系就像一个个知识点的骨架。 骨架弄清楚了,一个个知识点的上下文就清楚了。 所以我们学习异常,也是从异常的继承体系中学习!
Java中的异常继承体系图:
异常的根据是Throwable (意味着可以扔出去),有Error和Exception两个分支。 让我们来讨论一下Error和Exception。
Error (这种异常的发生原因不是程序的原因,而是计算机的CPU发生硬件故障(硬件原因)、程序执行中内存溢出)、环境原因等,导致程序无法正常执行等
因为这种类型的异常不是程序自身的原因! 我们都不研究这种异常!
Exception:这种类型的异常是由程序原因引起的,是我们重点研究的对象! 这种类型的异常包括编译时异常(非RuntimeException )和运行时异常。 接下来就这两个异常进行说明!
非RuntimeException:的编译时异常是编译过程中出现的代码错误,如语法错误、语句忘记加分或关键字写错。 这种错误在Eclipse等高级开发工具中出现是红色波浪线的错误提示。 这意味着不解决此异常,Java程序无法编译为字节码文件!
RuntimeException:运行时异常,即在程序执行过程中出现的异常。
Java中的异常与现实生活类比
假设,我们程序的执行在我们的生活中就像“自驾游”。
自行过程中可能发生的情况(模拟程序异常) :
1、开车去旅行途中,必须经过桥。 如果这座桥被洪水折断了! 旅行被中止了!
这类似于硬件/环境迫使程序退出的情况。
这种情况对应着我们的程序异常是Error类的异常!
2、我们正要开车去旅行的时候,开车前定期检查,发现轮胎没气了! 这个时候不把轮胎爆胎就不能出发。
出现这种情况就像我们的Java异常中的编译期异常一样。 如果不好好处理这个异常,程序就不能运行!
3、自行行驶中,开车在路上行驶,突然发动机坏了,现在程序中止了。 这个时候必须修车。 修好车后可以继续跑。
这就像我们程序运行时的异常一样!
编译和运行时异常的代码演示:
异常的处置
编译时异常处理
编译时异常必须处理,不处理程序就不能执行!
1、对于语法错误之类的异常,直接纠正即可。
2、对于JDK定义的编译时异常,需要进行显示处理。
什么是JDK自己定义的编译期异常?
JDK认为可能发生异常的代码,必须处理的异常是JDK的自定义编译异常。 在这种情况下,代码没有语法错误,但eclipse会报告错误! 有异常的代码会显示红色波浪线! 如下图所示
l异常的显示处理方案?
a、声明方法时用throws声明该方法中可能存在的异常。 (自己不处理异常,交给呼叫方处理) )。
b、用try…catch方式捕获异常代码块进行处理。
在下图中添加两个异常处理方案。
运行时异常处理
可以不处理运行时异常。 如果不处理,程序就可以运行,但是如果在运行中遇到运行时异常,程序会抛出异常并结束程序的执行
如下图所示。
运行时异常和编译时异常的解决方案有两种,但throws的异常解决方案对运行时异常来说是一样的! 写了就等于没写!
如果用try…catch方式处理异常,无论该异常是编译时的异常还是运行时的异常,都可以执行该异常代码后的代码! 如果不通过try…catch处理,则发生异常后的代码不会执行。 jvm是发生异常的位置,它将异常封装在一个异常对象中并抛出方法。 如果调用方法的方法也未被处理,则直接抛出。 如果仍未处理,则最终会将异常抛出到jvm。 当JVM接收到异常时,它将退出程序并打印有关异常对象的信息!
还没有下文。
如果想和作者交流或者学习Java,欢迎使用qq交流群: 576159719
如果你以为你还记得点赞! o(_) ) o哈哈哈~