JAVA之异常(Exception)
2020-01-15 本文已影响0人
Insecurity
一、什么是异常?(What )
1.Standard(标准)异常指的是执行过程中,出现的不正常现象,导致程序的中断。Java中的异常本身是一个类,当遇见异常时抛出异常对象,并终止程序按的运行。
2.个人理解:写的代码不正确,或考虑不全,程序无法继续执行,所给出的提示,帮助我们找到程序发生的问题,保证代码能正常运行得到想要的结果。
3.Java中异常的分类(Type)
1.Error (翻译为错误)
Error同Exception都是Throwable(可抛出的)的子类。指代虚拟机错误,内存溢出,线程死锁等等。程序本身是无法考虑到上层使用系统(JVM)所面临的问题的。
2.Exception (翻译为异常)
1.Exception又分为 CheckedException(已检查异常,又叫编译时异常) 和unCheckedException(不检查异常,不需要处理)
2.CheckedException 已检查异常,也就是这个异常,编译之前就已经检查了。若不处理则无法通过编译。
3.UnCheckedException ,RuntimeException就是UncheckedException,翻译为运行时异常。(可以理解为,而编译时无法看出,程序运行时才明白是否会出错。)
3.分类汇总图
![Throwable.png](https://img.haomeiwen.com/i11025060/3fe49d7f0d63a8c1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
3.异常的解析过程
1. UncheckedException ,发生异常时,由产生异常方法,一直冒泡到顶层调用者。而这个异常,已经定义好,JVM能够识别,JVM创建该异常 (相当于throw new Exception())返回个顶层方法,(现象 将错误打印在控制台)
2. CheckedException ,在编译时,能够直接检测出来,因此,当发生异常时,会进入到catch部分,并最终执行finally
image.png
4.总结,异常的作用其实就是在程序执行错误时,给出提示。那么为什么会存CheckedException 以及UncheckedException呢?给异常的处理提供了两种不同的处理方式。
1.CheckedException,编译时检测出的异常,直接提醒。这种方式可以避免程序员遗忘处理,坏处就是当try时,得写很多try catch代码,当throws 时,则会产生冒泡叠加。并且处理的很随意,导致顶层调用栈被破坏。(推荐)
2.UncheckedException,编译时不会提醒,但在运行时才可能发生。比如说除0 以及下标越界等。不用写很多的try catch 导致代码混乱,也不会破会顶层调用栈。(个人认为,你依旧得考虑这些异常,并用代码判断处理,所以这种方式并不推荐。)
1.手动处理 try catch
2.继续向上抛出throws
2.UncheckedException,编译时,不会提醒,能顺利通过编译,运行时,发生错误时,直接中断,打印到控制台。而不需要 我们手动去处理。这种异常,在使用时,代码更加简洁。
image.png
How(如何使用异常)
待完善,今天累了。
Where(在哪里用到?)
1.调用别人封装的方法时候,处理抛出的异常
2.自己封装方法,需要处理异常情况的时候,throws异常。
3.查看日志信息,定位程序发生异常的位置。