Java基础之《受检查异常和不受检查异常》

1.最近重温了《java编程思想(第四版)》的异常章节。

Java中的异常分为受检查的异常和不受检查的异常。

(1)受检查的异常:这种在编译时被强制检查的异常称为"受检查的异常"。即在方法的声明中声明的异常。

(2)不受检查的异常:在方法的声明中没有声明,但在方法的运行过程中发生的各种异常被称为"不被检查的异常"。这种异常是错误,会被自动捕获。

从作者BruceEckel的语气中看以看出,作者对受检查的异常是有质疑的,并认为在一些规模较小的程序中,受检查的异常能够提高开发效率,但随着项目规模的扩大,过多的受检

查的异常将变的难以管理,其带来的好处也将消失殆尽。

  结论:受检查的异常作用不大,往往起不到什么作用。还是运行时异常即不受检查的异常好。

 

2.被检查的异常和不受检查的异常有什么区别?

A.被检查的异常应该用try-catch块代码处理,或者在main方法中用throws关键字让JRE了解程序可能抛出哪些异常。不受检查的异常在程序中不要求被处理或用throws语句告知。

B.Exception是所有被检查异常的基类,然而,RuntimeException是所有不受检查异常的基类。

C.被检查的异常适用于那些不是因程序引起的错误情况,比如:读取文件时文件不存在引发的FileNotFoundException。然而,不被检查的异常通常都是由于糟糕的编程引起的,比如:在对象引用时没有确保对象非空而引起的NullPointerException

 

3.不受检查异常的基类RuntimeException.实际上在java中“不受检查的异常”是默认一定在程序中的,也就是说你不去声明使用它,它也会一直在被使用着。常见的RuntimeException异常包括:NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。

NumberFormatException:字符串转换为数字时,例如 int i= Integer.parseInt("ab3");

ArrayIndexOutOfBoundsException:数组越界,比如 int[] a=new int[3]; int b=a[3]; 

ClassCastException:类型转换错误,比如 Object obj=new Object(); String s=(String)obj; 
ArithmeticException:算术错误,典型的就是0作为除数的时候。

IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常。

 

4.Java中所有异常或者错误都继承Throwable,我们把它分为三类:
Error:所有都继承自Error,表示致命的错误,比如内存不够,字节码不合法等。
Exception:这个属于应用程序级别的异常,这类异常必须捕捉。
RuntimeException:RuntimeException继承了Exception,而不是直接继Error,这个表示系统异常,比较严重。

没有更多推荐了,返回首页