Java中的异常类型学习
Java中的异常类型学习
直接在IDEA看源码继承关系
感想:遇到不懂的基础知识直接去看源码、类继承关系。看完对你理解这个问题很有帮助,注意,是理解不是死记。
- Error(错误)和 Exception(异常)都是 java.lang.Throwable 类的子类
- Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类,
- Exception 是程序正常运行过程中可以预料到的意外情况,并且应该被开发者捕获,进行相应的处理。
- Error 是指正常情况下不大可能出现的情况,绝大部分的 Error 都会导致程序处于非正常、不可恢复状态。所以不大需要被开发者捕获。
好,继续往下看源码
- 可以看出
- Exception异常又分为两类
- check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出(如:IOException、ClassNotFoundException等等…)
- runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:(如:IndexOutOfBoundsException、ArithmeticException等等…)
异常的继承关系
通过上面的方法,查看源码,同时学到异常类之前的父子类继承关系
如:IOException继承于Exception
ArrayIndexOutOfBoundsException父类为IndexOutOfBoundsException
IndexOutOfBoundsException父类为RuntimeException
等等这些都可以通过源码来学习到
一道面试题
说出下面代码的运行结果,执行顺序。(此题的出处是《Java编程思想》)
把这道题目看明白就差不多了
class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
public class Human {
public static void main(String[] args) throws Exception {
try {
try {
throw new Sneeze();
}
catch ( Annoyance a ) {
System.out.println("Caught Annoyance");
throw a;
}
}
catch ( Sneeze s ) {
System.out.println("Caught Sneeze");
return ;
}
finally {
System.out.println("Hello World!");
}
}
}
运行结果为:
Caught Annoyance
Caught Sneeze
Hello World!