Java异常

参考原文: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除外;

 

个人学习,内容简略。

 

posted @ 2020-06-12 16:39  一生的风景  阅读(338)  评论(0编辑  收藏  举报