【Java异常学习笔记系列】Java异常体系以及异常的基本知识

一、Exception的体系结构图

【Java异常学习笔记系列】Java异常体系以及异常的基本知识



二、Throwable、Error、Exception、RuntimeException之间的区别和关系

Throwable:Throwable类是Java语言中所有错误、异常的父(超)类。他的两个子类是Error类和Exception类。

Error:Error类是Throwable类的子类,也就是程序无法处理的错误。Error总是不可受检的,经常用来表示系统错误或低层资源的错误,如果可能的话,应该在系统级被捕获。

Exception:Exception 类及其子类是Throwable 的一种形式,分为Unchecked Exception和Checked Exception,它指出了合理的应用程序想要捕获的条件。

RuntimeException:RuntimeException是Exception的子类,属于UncheckedException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException ,运行时异常的任何子类都无需在 throws 子句中进行声明。也就是说RuntimeException可以不抛给上级调用者处理,可以直接抛给JVM处理。但是最好也try catch一下。


三、异常的区别和分类

Java包含两种异常:Checked Exception和Unchecked Exception。

Checked异常必须被显式地捕获或者传递,必须要求程序员强制处理,而unchecked异常则可以不必捕获或抛出,不要求程序员强制处理,因为是运行时错误,不一定会触发。Checked异常继承java.lang.Exception类。Unchecked异常继承自java.lang.RuntimeException类。


四、Try{}catch{}是什么意思?

这是java用来捕捉异常的,捕捉程序在运行时可能出现的异常。

当代码在运行时可能出现异常时用try{} catch{}捕捉异常,这样程序出现异常不会立即跳出程序,可以经过处理后让程序继续运行或者跳出。

【Java异常学习笔记系列】Java异常体系以及异常的基本知识


五、捕获异常和抛出异常

抛出指的是不处理,捕获则处理。

捕获异常就是catch{//这里指定自己的异常处理方法}

抛出异常就是throws 异常,就是对异常不作处理,将异常抛给上级调用者处理。如果是unchecked Exception(非受检异常)则可以直接交给jvm进行处理,如果是checked Exception(受检异常),则不管怎么抛,必须有一上级调用则进行catch异常处理,否则会报错。也就是两个选择,要不自己捕获处理,要不交给调用者来捕获处理,不管哪种,都要自己定义try/catch来处理可能存在的异常,例如:

【Java异常学习笔记系列】Java异常体系以及异常的基本知识【Java异常学习笔记系列】Java异常体系以及异常的基本知识

六、throws和throw的区别

抛出异常的作用就是将异常交给上级调用者去catch,然后做出处理,所以当一个函数调用了一个带有throws非运行时异常声明的函数或是内含throw的函数时,如果调用者不try\catch,就必须带上throws异常声明,否则不能通过编译。

1、throws出现在方法函数头;而throw出现在函数体。

2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是程序员主动抛出了异常,执行throw则一定抛出了某种异常对象。

3、两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用者处理。

throw的使用例子:

【Java异常学习笔记系列】Java异常体系以及异常的基本知识

【Java异常学习笔记系列】Java异常体系以及异常的基本知识

这里是,我定义了一个自定义异常,然后新建了一个类用于判断异常,主动抛出异常,交给测试类去捕获。(如果在test1()中既不try\catch也不throws,就无法通过编译)



七、主要的异常有那些?

RuntimeException(Unchecked Exception)异常:

ArithmeticException:数学计算异常
NullPointerException
:空指针异常
NegativeArraySizeException
:负数组长度异常
ArrayOutOfBoundsException:
数组索引越界异常
ClassNotFoundException
:类文件未找到异常
ClassCastException
:类型强制转换异常
SecurityException
:违背安全原则异常

Checked Exception异常:
NoSuchMethodException
:方法未找到异常
IOException
:输入输出异常
EOFException
:文件已结束异常
FileNotFoundException
:文件未找到异常
NumberFormatException
:字符串转换为数字异常


总结就到此为止啦~~【Java异常学习笔记系列】Java异常体系以及异常的基本知识




欢迎关注我的博客,一起学习讨论
要转载,请附上原文链接,作者:SnailMann

可以关注我的私人github: https://github.com/SnailMann,欢迎watch ,star, fork