异常

异常

异常(Exception)

异常指的是在程序运行过程中发生的异常事件,通常是由外部问题(如硬件错误、输入错误)所导致的

人做事一般都不会一帆风顺,会出现意外或者突发情况

检查性异常:检查性异常是由于用户输入和问题引发的异常,这是程序猿无法预见的,这些异常在编译时不能被简单的忽略

运行时异常:运行时异常时可能被程序猿避免的问题,而这些异常在编译时能被简单的忽略

错误(Error)

错误不是异常,而是脱离程序源控制的问题,错误在代码中通常被忽略,一般都是java虚拟机生成的

异常与错误的区别

异常(Exception)都是运行时的。编译时产生的不是异常,而是错误(Error)。

最开始大家都将程序设计导致的错误(Error)认定为不属于异常(Exception)。

但是一般都将Error作为异常的一种,所以异常一般分两类,Error与Exception。

出现error一般java虚拟机都会选择终止线程,而出现Exception一般都在程序中处理

异常的结构

img

他们的超类(最大的类)是Throwable,有两个重要的子类Exception和Error,Exception包括了程序的编译和运行时异常,Error一般都是由于jvm的原因导致的,所以要尽量的避免出现Error因为它属于严重的错误

异常的处理机制

捕获异常
public class Exception {
    public static void main(String[] args) {
        int a=0;
        int b=1;
        try { //监控区域
            System.out.println(b/a);
        }catch (java.lang.Exception e){ //捕获异常,catch括号里面是想要捕获的异常类型
            System.out.println("被除数不能为0");
        }finally { //一般用来关闭资源,无论如何fanally下面的代码块都会执行
            System.out.println("finally");
        }
    }
}

注意点:

  1. try里面的代码发生异常,就会去catch寻找适合的异常类型,然你输出catch的代码块
  2. catch代码块可以有多个,但是catch里面的捕获异常类型必须从小到大的异常类
  3. idea的快捷键ctrl+alt+t
  4. try,catch,finally,可以少一个catch,可以少一个finally,但是必须要有try和其中一个
抛出异常
public class Exception {
    public static void main(String[] args) {
        //一般向上抛出异常,调用时实现try-catch
        try {
            new Exception().test();
        } catch (ArithmeticException e) {
            e.printStackTrace(); //打印异常信息
        }
    }
    //处理不了这个异常,方法上抛出异常,交给调用的类实现try-catch
    public void test() throws ArithmeticException{
        System.out.println(1/0);
        throw new ArithmeticException(); //一般在方法中使用,主动的抛出异常
    }
}

自定义异常

一般java内置的异常够我们使用了,但是用户也可以自定义异常

自定义异常的类

public class MyException extends java.lang.Exception {
    private int detail; //定义一个变量

    public MyException(int message) { //使用构造方法接受传进来的值
        this.detail = message; //将私有的变量值等于传进来的值
    }

    @Override
    public String toString() { //打印输出信息
        return "MyException{" +
                "detail='" + detail + '\'' +
                '}';
    }
}

测试类

public class Test {
    static void test(int a) throws MyException {
        if(a>10){ //当传进来的值大于10
            throw new MyException(a); //调用自定义异常的类中构造器的方法
        }
        System.out.println(a); //输出传进来的值
    }

    //要么给这个方法往上抛出,要么实现try-catch
    public static void main(String[] args) {
        try {
            test(11); //调用静态test的方法
        } catch (MyException e) {
            System.out.println("出现异常"+e); //输出自定义类中的打印输出方法
            //当我们调用 print 或者 println 打印一个对象时,它会打印出这个 对象的 toString()的最终根源
            //不懂的可以看看百度
        }
    }
}
posted @ 2020-11-30 12:08  博客帅帅  阅读(228)  评论(0)    收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css