参考原文:https://blog.csdn.net/java_cxrs/article/details/91661623
版权声明:本文为CSDN博主「不善^」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/java_cxrs/java/article/details/91661623
大概也学了有段时间的 java,对于异常的概念还是很模糊,还只是停留在该抛的抛,该捕获的捕获的这个知识层面上。
刷到了异常的题目,自己想不明白,所以还是来基本的了解下异常
例题1:
public class Test{ void readCard(int cardNo) throws Exception { System.out.println("Reading Card"); } void checkCard(int cardNo) throws RuntimeException { // line n1 System.out.println("Checking Card"); } public static void main(String[] args) { Test ex = new Test(); int cardNo = 12344; ex.checkCard(cardNo); //line n2 ex.readCard(cardNo); //line n3 } } //异常处理 结果是什么? A. Reading Card Checking Card B. 编译仅在 line n1 处失败。 C. 编译仅在 line n2 处失败。 D. 编译仅在 line n3 处失败。 E. 编译在 line n2 和 line n3 处均失败。
答案为什么是D呢???? 下面初步理解后就会知道了。
Error : 是程序中无法处理的错误,表示运行时出现了严重的错误 比如代码编译问题,语法问题这些虚拟机无法处理的问题,就会报Error错误翻译过来就是虚拟机发生了一个致命的错误。如下
Exception in thread "main" java.lang.Error: Unresolved compilation problems: ex cannot be resolved to a type Syntax error on token "d", = expected after this token at com.oracle.test2.dome06.main(dome06.java:17)
Exception:程序本身可以捕获并且可以处理的异常。 一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。
运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求处理异常,比如用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
非运行时异常(受检异常):Exception中除RuntimeException极其子类之外的异常。编译器会检查此类异常,如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
处理异常的关键词:
抛出异常:throw,throws
捕获异常:try,catch,finally
抛出异常throw
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结 束当前方法的执行。
throw 使用格式:
try.....catch使用:
try { } catch (Exception e) { // TODO: handle exception }finally { }
例题中:代码 ex.readCard(cardNo); 调用以下方法,方法执行了Exception抛异常
void readCard(int cardNo) throws Exception {
System.out.println("Reading Card");
}
所以 根据 非运行时异常(受检异常) 的规定:
必须抛异常或补异常否则编译不通过.。
小知识点:
1 当异常没有被检测出来 捕获或者抛出时, 它才可以重新抛出;
2 Error是虚拟机无法处理的异常,不可恢复;
3 异常均可恢复 error除外;
个人学习,内容简略。