JAVA总结篇六(异常)

异常

1.异常指不期而遇的各种问题,通常是Throwtable的子类,所以JAVA中的异常都是对象,描述了一段编码中的错误条件。

2.而throwtable有两个重要的子类:Exception(异常)和Error(错误);其中Error不是程序可以处理的,而是jvm本身出现的错误,如:内存资源不足时将出现OutOfMemoryError;而Exception是程序可以处理的。

3.异常又可以分为可查询异常与不可查询异常;Exception除了运行时异常以外的其它子类异常都属于可查询异常,这类异常要么补获要么抛出,否则编译不会通过;而运行时异常和Error则为不可查询异常,其中的运行时异常由于编译器不会检查它,所以即使不补获或者抛出,编译也是可以通过的,但在逻辑上应该尽量避免,因为在运行时依旧会被系统抛出。

这里主要说的便是捕获异常,抛出异常以及自定义异常:

一、捕获异常:

格式:try{

需要捕获异常的代码块

}catch(异常的种类名 异常自定义名){

处理异常的方式(有对应的异常时进入)

}finally{

无论是否有异常都会执行的部分

}

1.try部分,只要发生异常,那么剩下的代码将不会执行,而是直接进入catch部分;

2.一个try块可以有多个catch块分别来处理遇到的不同的异常,但通常在发生异常的情况下只会执行其中一个对应的catch;

3.finally部分可以省略不写。

三、抛出异常:

格式:

方法名+throws+要抛出的异常名,要抛出的异常名...,要抛出的异常名(异常列表)

当方法抛出异常时,对于抛出的异常及其子异常,该方法将不做处理,而是交给调用该方法的方法处理,当调用方法无力处理时,应该继续抛出。

四、自定义异常:

自定义异常的表面原理可以说就是构造方法;在这里就不多说,直接用代码解释:

package com.test;

public class Main {
    public static void main(String[] args) {
        try {
            int i=1/0;
        } catch (NullPointerException e) {
            System.out.println("空指针异常");
        }catch (ArithmeticException e) {//捕获异常
            throw new MyException("除数不能为0啊啊啊啊啊");//抛出异常
        }
    }

}

package com.test;

public class MyException extends RuntimeException{

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    
    public MyException(String str){//带String参数的构造方法
        super(str);//调用RuntimeException类的对应的构造方法
    }

}

最后运行下来的结果:

Exception in thread "main" com.test.MyException: 除数不能为0啊啊啊啊啊
    at com.test.Main.main(Main.java:23)

猜你喜欢

转载自blog.csdn.net/imjavaxb/article/details/80305568