当前位置:   article > 正文

Checked异常和Unchecked异常

unchecked异常

1,异常分类

        从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions。Unchecked Exceptions指的是被程序员check的异常,Checked Exceptions指的是被编译器check的异常。如下图:

 

        Throwable下面有两个子类,分别为Error和Exception,其中所有的Error类和Exception类中的RuntimeException类都属于Unchecked异常,其余都属于Checked异常。

2,处理机制

        Checked Exceptions可能会发生的地方,编译器会强制要求你要么处理这个异常(try catch块进行处理),要么在这个方法的头部声明这个方法可能会抛出一个异常,对调用这个方法的方法做一个警告,要求调用者来处理这个异常(throws声明)。Unchecked Exceptions可能会发生的地方,编译器无法预见,因此不要求做任何处理。一般来说,Checked Exceptions常常是可以捕获捕获并处理的,往往由与客户端的不正确调用引起,捕获异常并处理可以给用户提供一次改正的机会,提高程序的健壮性。例如:用户指定打开文件路径的文件并不存在,因此可以捕获这个异常,做一个提示,并让用户可以重新选择路径。Unchecked Exceptions一般捕获后没有什么价值的,其包含的Error属于系统的内部错误,是由于设备错误,物理限制,内存不足,JVM发生内部错误,不兼容等等原因导致的,因此捕获后没有什么处理价值。另一种RuntimeException则是由于程序员本身代码有错误,发生除零错误,空指针异常,数组越界等等,这种纯粹属于程序员写代码时的失误引起,需要改变程序,因此捕获的价值很低,重写代码找出bug即可。

3,处理实例

Unchecked Exceptions:

在函数A中抛出Unchecked异常,不强制声明或捕获。

  1. public class son {
  2. public static void main(String[] args) {
  3. C();
  4. }
  5. public static void A(){
  6. throw new RuntimeException();
  7. }
  8. public static void B() {
  9. A();
  10. }
  11. public static void C() {
  12. B();
  13. }
  14. }

你非要捕获他也可以。。。一般用处不大。

  1. public class son {
  2. public static void main(String[] args) {
  3. try {
  4. C();
  5. } catch (RuntimeException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. System.out.println("捕捉到Unchecked Exception");
  9. }
  10. }
  11. public static void A() throws RuntimeException{
  12. throw new RuntimeException();
  13. }
  14. public static void B() throws RuntimeException {
  15. A();
  16. }
  17. public static void C() throws RuntimeException {
  18. B();
  19. }
  20. }

 

Checked Exceptions

 在A中抛出Checked异常,需要声明或者捕获。

  1. public class son {
  2. public static void main(String[] args) throws IOException {
  3. C();
  4. }
  5. public static void A() throws IOException{
  6. throw new IOException();
  7. }
  8. public static void B() throws IOException {
  9. A();
  10. }
  11. public static void C() throws IOException {
  12. B();
  13. }
  14. }

  1. public class son {
  2. public static void main(String[] args) {
  3. try {
  4. C();
  5. } catch (IOException e) {
  6. // TODO Auto-generated catch block
  7. e.printStackTrace();
  8. System.out.println("捕捉到啦");
  9. }
  10. }
  11. public static void A() throws IOException{
  12. throw new IOException();
  13. }
  14. public static void B() throws IOException {
  15. A();
  16. }
  17. public static void C() throws IOException {
  18. B();
  19. }
  20. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/213774
推荐阅读
相关标签
  

闽ICP备14008679号