【Java异常学习笔记系列】Java异常体系以及异常的基本知识
一、Exception的体系结构图
二、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类。
这是java用来捕捉异常的,捕捉程序在运行时可能出现的异常。
当代码在运行时可能出现异常时用try{} catch{}捕捉异常,这样程序出现异常不会立即跳出程序,可以经过处理后让程序继续运行或者跳出。
五、捕获异常和抛出异常
抛出指的是不处理,捕获则处理。
捕获异常就是catch{//这里指定自己的异常处理方法}
抛出异常就是throws 异常,就是对异常不作处理,将异常抛给上级调用者处理。如果是unchecked Exception(非受检异常)则可以直接交给jvm进行处理,如果是checked Exception(受检异常),则不管怎么抛,必须有一上级调用则进行catch异常处理,否则会报错。也就是两个选择,要不自己捕获处理,要不交给调用者来捕获处理,不管哪种,都要自己定义try/catch来处理可能存在的异常,例如:
六、throws和throw的区别
抛出异常的作用就是将异常交给上级调用者去catch,然后做出处理,所以当一个函数调用了一个带有throws非运行时异常声明的函数或是内含throw的函数时,如果调用者不try\catch,就必须带上throws异常声明,否则不能通过编译。
1、throws出现在方法函数头;而throw出现在函数体。
2、throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是程序员主动抛出了异常,执行throw则一定抛出了某种异常对象。
3、两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用者处理。
throw的使用例子:
这里是,我定义了一个自定义异常,然后新建了一个类用于判断异常,主动抛出异常,交给测试类去捕获。(如果在test1()中既不try\catch也不throws,就无法通过编译)
七、主要的异常有那些?
RuntimeException(Unchecked Exception)异常:
ArithmeticException:数学计算异常
NullPointerException:空指针异常
NegativeArraySizeException:负数组长度异常
ArrayOutOfBoundsException: 数组索引越界异常
ClassNotFoundException:类文件未找到异常
ClassCastException:类型强制转换异常
SecurityException:违背安全原则异常
Checked Exception异常:
NoSuchMethodException:方法未找到异常
IOException:输入输出异常
EOFException:文件已结束异常
FileNotFoundException:文件未找到异常
NumberFormatException:字符串转换为数字异常
总结就到此为止啦~~