赞
踩
从异常处理机制的角度可以分为两类,Unchecked Exceptions和Checked Exceptions。Unchecked Exceptions指的是被程序员check的异常,Checked Exceptions指的是被编译器check的异常。如下图:
Throwable下面有两个子类,分别为Error和Exception,其中所有的Error类和Exception类中的RuntimeException类都属于Unchecked异常,其余都属于Checked异常。
Checked Exceptions可能会发生的地方,编译器会强制要求你要么处理这个异常(try catch块进行处理),要么在这个方法的头部声明这个方法可能会抛出一个异常,对调用这个方法的方法做一个警告,要求调用者来处理这个异常(throws声明)。Unchecked Exceptions可能会发生的地方,编译器无法预见,因此不要求做任何处理。一般来说,Checked Exceptions常常是可以捕获捕获并处理的,往往由与客户端的不正确调用引起,捕获异常并处理可以给用户提供一次改正的机会,提高程序的健壮性。例如:用户指定打开文件路径的文件并不存在,因此可以捕获这个异常,做一个提示,并让用户可以重新选择路径。Unchecked Exceptions一般捕获后没有什么价值的,其包含的Error属于系统的内部错误,是由于设备错误,物理限制,内存不足,JVM发生内部错误,不兼容等等原因导致的,因此捕获后没有什么处理价值。另一种RuntimeException则是由于程序员本身代码有错误,发生除零错误,空指针异常,数组越界等等,这种纯粹属于程序员写代码时的失误引起,需要改变程序,因此捕获的价值很低,重写代码找出bug即可。
在函数A中抛出Unchecked异常,不强制声明或捕获。
- public class son {
- public static void main(String[] args) {
- C();
- }
- public static void A(){
- throw new RuntimeException();
- }
- public static void B() {
- A();
- }
- public static void C() {
- B();
- }
- }
你非要捕获他也可以。。。一般用处不大。
- public class son {
- public static void main(String[] args) {
- try {
- C();
- } catch (RuntimeException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("捕捉到Unchecked Exception");
- }
- }
- public static void A() throws RuntimeException{
- throw new RuntimeException();
- }
- public static void B() throws RuntimeException {
- A();
- }
- public static void C() throws RuntimeException {
- B();
- }
- }
在A中抛出Checked异常,需要声明或者捕获。
- public class son {
- public static void main(String[] args) throws IOException {
- C();
- }
- public static void A() throws IOException{
- throw new IOException();
- }
- public static void B() throws IOException {
- A();
- }
- public static void C() throws IOException {
- B();
- }
- }
- public class son {
- public static void main(String[] args) {
- try {
- C();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println("捕捉到啦");
- }
- }
- public static void A() throws IOException{
- throw new IOException();
- }
- public static void B() throws IOException {
- A();
- }
- public static void C() throws IOException {
- B();
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。