异常

异常的概念

  • 异常指的是程序运行时发生的不正常事件;异常能够被程序处理,保证程序继续运行下去
public class Demo {
    public static void main(String[] args) {
        int a = 10;
        int b = 0;
        //明知10/0 除不尽 非要运算导致算数异常
        //java.lang.ArithmeticException
        System.out.println(a/b);
    }
}
  • 开车--->撞车--->报警--->继续开车(由开车到撞车到报警解决问题
  • 程序--->运行--->异常--->处理异常(程序运行出现异常、能够被处理还可以继续运行
  • 开车--->撞车--->不报警--->协商无果--->打架(撞车处理不当导致事情无法解决
  • 程序--->运行--->错误--->程序终止--->修改代码(程序运行出现错误、异常无法处理导致程序崩溃

异常结构图

  • 图中所示:Throwable是Java中所有错误(Error)和异常(Exception)的父类。在Java中,所有的异常和错误都必须继承自Throwable类。
  • Error(错误):JVM内部错误或系统错误,这类错误一般由JVM或操作系统引起,而程序本身一般无法处理和恢复。
  • Exception: 程序运行过程中可能会出现的异常情况,包括可检查异常(Checked Exception)和不可检查异常(Unchecked Exception)两种类型。
  • RuntimeException:子类都是运行时异常 其他都为编译时异常

异常的语法

public class Demo {
    public static void main(String[] args) {
        
        try{
            //产生异常的代码段
        }catch (异常类型 1){
            //异常类型代码块
        }finally {
            //最后执行的语句块
        }
    }
}
  • try-catch-finally 块中使用 return 语句时,finally 块中的代码会在返回结果之前执行,但是通常情况下,return 语句仍然是最后执行的语句
  • 有一个特殊情况 finally 块可能不会被执行。那就是在程序运行的时候遇到了 System.exit() 方法调用。
  • System.exit() 方法并不仅仅只在 finally 块中会导致程序退出。在任何地方调用这个方法都会使程序立即退出,包括在 main() 方法中调用 System.exit() 也会导致 JVM 关闭
public class Demo {
    public static void main(String[] args) {

        //show(10,0);  //单独执行只是说抛出了异常没有处理
        try {
            show(10,0);
        } catch (Exception e) {
            e.printStackTrace(); //打印异常错误信息
        }
    }
    public static void show(int a,int b){
        if (b == 0) {
            //主动抛出异常 一般在方法内部使用但是并没有处理
            throw new ArithmeticException("出现算数异常");
        }
    }
}
public class Demo {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat();

        Date date = new Date();

        String str = sdf.format(date); 

        System.out.println(str); //23-3-6 下午11:13

        String s = "23-3-6 下午11:12";

        //当出现异常直接对异常进行捕捉处理
        try {
            Date parse = sdf.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        
        System.out.println("s = " + s); //s = 23-3-6 下午11:12
    }
}

自定义异常

定义异常类--->继承Throwable类、继承Exception类或者RuntimeException类--->编写构造方法继承父类的实现--->实例化自定义对象--->使用throw抛出

public class MyException extends Exception{
    private int a;

    public MyException(int a) {
        this.a = a; 
    }

    //打印异常信息
    @Override
    public String toString() {
        return "MyException{" +
                "a=" + a +
                '}';
    }
}
public class Demo2 {
    public static void main(String[] args) {
        try {
            show(11);
        } catch (MyException e) {
            throw new RuntimeException("MyException----->" + e);
            //Exception in thread "main" java.lang.RuntimeException: MyException----->MyException{a=11}
            // at Demo6.Demo2.main(Demo2.java:8)
        }
    }
    public static void show(int a) throws MyException {
        if (a > 10){
            throw  new MyException(a);
        }
        System.out.println(a);
    }
}
最后修改:2023 年 03 月 29 日
如果觉得我的文章对你有用,请随意赞赏