美文网首页
【自学java】异常处理简介

【自学java】异常处理简介

作者: AlexLJS | 来源:发表于2021-02-04 15:58 被阅读0次

    第四章 异常处理

    学习 java 、刷算法题时,很少有人会在乎异常处理, 要不 try catch 、 要不就 throw 。但在做项目时候, 异常处理混乱会导致程序可维护性降低。异常本身也是程序的一部分。

    第一节 简介


    4.1.1 分类

    Throwable 接口又分为“异常”、“错误”。异常是程序可以自己处理的, 错误一般是程序无法处理。

    2020-07-22_210628.png

    一旦捕获了异常,该段程序进入异常处理流程,不会在执行。try 后的代码还是会继续执行的。

        public static void main(String[] args) {
            try {
                System.out.println(13/0);
            }catch (Exception e){
                e.printStackTrace();
            }
            System.out.println("会往下执行码?");
        }
    out
    会往下执行码?
    java.lang.ArithmeticException: / by zero
    at com.awork.common.utils.Test.main(Test.java:6)
    

    4.1.2 检测性异常

    异常的另一种分类 : 受检异常 checked、 非受检异常 unchecked。

    区别: 在编译的过程中, 非受检异常不会提示,只有当程序运行到异常位置触发异常, 程序寻找异常是否被处理。

    非受检异常: RuntimeException 、 Error
    受检异常: IOException 、 SQL …

    注:
    jvm 认为受检异常是可修复的,在编译时会提出, 不会通过编译。诸如 RuntimeException 之类的非受检异常,可以通过编译。 但 jvm 认为程序本身有问题,应该本身捕获异常并处理,再重新运行程序。


    第二节 异常与错误

    4.2.1 区别

    异常是程序可以自己处理的, 错误一般是程序无法处理。 异常处理是程序的一部分,处理过后程序依然可以继续执行流程 。 错误可能需要重新分配 jvm 资源,(如爆栈) 程序已经无法通过 try catch 处理了 。


    第三节 异常的处理方式

    4.3.1 处理

    1. 常规 try ... catch ... finally ...
        public static void main(String[] args) {
            try {
                System.out.println(13/0);
            }catch (Exception e){
                e.printStackTrace();
            } finally {
                System.out.println("finally");
            }
            System.out.println("会往下执行码?");
        }
    out :
    finally
    java.lang.ArithmeticException: / by zero
    会往下执行码?
    

    可见 , 即使抓到异常, finally 代码块还是会执行 , 并且先于后续代码。

    1. throws

    声明在方法中 ,表示方法可能会抛出异常,上层调用者需要捕获异常。

    1. throw

    手动抛出异常 : throw new MyException(params);

    4.3.2 自定义异常

    便于对一类异常进行自定义分类, 遵循 java 封装原则。 便于捕获异常迅速定位。(比如, 是某类 service 出错)

    继承 Exception , 重写构造方法 , 例如:

    public class MyException extends Exception {
        public MyException() {
            super();
        }
        public MyException(String str) {
            super(str);
        }
    }
    

    4.3.3 获取异常信息的常用方法

    1. 方法1
      e.printStackTrace();

    2. 方法2

                StackTraceElement[] stackTrace = e.getStackTrace();
                for (StackTraceElement stackTraceElement : stackTrace) {
                    String className = stackTraceElement.getClassName();
                    System.out.println(className);
                }
    

    相关文章

      网友评论

          本文标题:【自学java】异常处理简介

          本文链接:https://www.haomeiwen.com/subject/jzyunhtx.html