throws Exception与多个try catch抓取不同的异常给前端返回不同报错信息

 

以前在学习java的过程中,学到的知识是:如果代码块可能会抛出异常或者需要实现的代码已经有抛出的异常,需要用try 来包裹代码块, 用catch来捕获异常。这个没啥毛病~后续工作之后掌握的是自定义一些专属的方法异常或者是项目自定义异常,来控制专属的方法或者操作报错后,便于区分报错类型,也可以根据不同的catch到的异常来给前端传递不同的话述(通过不同的报错定位不同的问题,而不是统一的一句“提交失败”)。

package com.company.exception;

public class TestMainException {
    public static void main(String[] args) {
        System.out.println(A.A());
    }

    static class A {
        static class B {
            public static boolean B() {
                return true;
            }
        }

        public static String A() {
            if (B.B()) {
                return "true";
            } else {
                return "false";
            }
        }

    }

}

 原始代码打印: true

修改加入异常之后,测试为:

package com.company.exception;

public class TestMainException {
    public static void main(String[] args) {
        try {
            System.out.println(A.A());
        } catch (CException e) {
            System.out.println(e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    static class A {
        static class B {
            public static boolean B() throws Exception {

                int i = 1/0;
                return true;
            }
        }

        public static String A() throws Exception {
            try {
                if (B.B()) {
                    return "true";
                } else {
                    return "false";
                }
            } catch (CException e) {
                throw new CException("fk~ 居然失败了");
            }catch (Exception e) {
                throw new Exception("我是个默认异常");
            }
        }
    }

    static class CException extends  Exception{

        public CException(String message) {
            super(message);
        }
    }
}

这个就会返回一个 “我是个默认异常” 这样的话述。

如果我们在B方法中添加一些业务,同时想把业务信息的报错提示到前端,那么就得:

package com.company.exception;

public class TestMainException {
    public static void main(String[] args) {
        try {
            System.out.println(A.A());
        } catch (CException e) {
            System.out.println(e.getMessage());
            // return new AjaxResult(Status.STATUS_ERROR_UNKNOWN, i18nController.getMessage("approval.error"));
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    static class A {
        static class B {
            public static boolean B() throws Exception {

                //                int i = 1/0;
                // 业务代码
                if (1 == 1) {
                    throw new CException("流程异常");
                }
                // 业务代码结束
                return true;
            }
        }

        public static String A() throws Exception {
            if (B.B()) {
                return "true";
            } else {
                return "false";
            }
        }
    }

    static class CException extends Exception {

        public CException(String message) {
            super(message);
        }
    }
}

这里打印的就是 :流程异常

哎呀说了那么多好像扯远了,今天的随笔主要是想说,B()方法 抛出异常的时候,以前是学到的是 throws Exception

的时候需要抛出多个异常,方便上面方法捕获,但是其实只抛出一个Exception 上方也可以捕获多种不同异常,返回不同的报错信息。当然也可以写  throws CException, Exception{} 这样可能比较规范一些,代码阅读性更加友好~(但是idea 现在的规范是不希望你抛出多个异常的,像是这种CException,idea会直接因为你已经抛出了Exception 异常而把 CException 置灰掉。因为你都抛出了CException 的老爹~所以throws 多个异常的时候可以写一些不同类型的多种异常~) 

总结一下,throws Exception 就可以了,上面可以根据不同的catch 而返回不同的话述,而且catch的时候需要有个 

catch (Exception e) {  } 来兜底。剩的有些异常被漏掉~

好了好了,叭叭一堆废话~

 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页