首页 > 编程语言 >Java异常处理机制及Result最佳实践

Java异常处理机制及Result最佳实践

时间:2023-07-03 23:22:24浏览次数:39  
标签:code Java String param 最佳 Result return message public

  • 从jvm层看待异常处理机制

      1.当方法抛出异常时,首先会在当前方法的异常表中查找符合的异常处理程序
      2.如果找到匹配的异常处理程序,则继续在该异常处理程序中继续执行逻辑
      3.如果找不到匹配的,则弹出当前栈帧即结束当前方法的执行,让上一层调用者在其异常表中寻找匹配的异常处理程序....,当在最后一个方法中也找不到匹配的异常处理程序,则终止当前线程
      4.如果异常在最后一个非守护线程中被抛出,则jvm会停止。比如这个线程是main线程
    

    注:异常表:可以理解为catch的异常信息

  • 业务异常与系统异常

    业务异常:用户能看懂的
    系统异常:用户看不懂,开发人员能看懂的
    

    案例

    1. 异常信息枚举类
    /**
     * 异常信息枚举类
     */
    public enum ErrorCode {
        /**
         * 系统异常(开发人员能看懂)
         */
        SYSTEM_ERROR("A000", "系统异常"),
        /**
         * 业务异常(用户能看懂的)
         */
        BIZ_ERROR("B000", "业务异常"),
        /**
         * 没有权限
         */
        NO_PERMISSION("B001", "没有权限"),
    
        ;
        /**
         * 错误码
         */
        private String code;
        /**
         * 错误信息
         */
        private String message;
    
        ErrorCode(String code, String message) {
            this.code = code;
            this.message = message;
        }
    
        /**
         * 获取错误码
         *
         * @return 错误码
         */
        public String getCode() {
            return code;
        }
    
        /**
         * 获取错误信息
         *
         * @return 错误信息
         */
        public String getMessage() {
            return message;
        }
    
        /**
         * 设置错误码
         *
         * @param code 错误码
         * @return 返回当前枚举
         */
        public ErrorCode setCode(String code) {
            this.code = code;
            return this;
        }
    
        /**
         * 设置错误信息
         *
         * @param message 错误信息
         * @return 返回当前枚举
         */
        public ErrorCode setMessage(String message) {
            this.message = message;
            return this;
        }
    
    }
    
    1. Result 结果类
    import java.io.Serializable;
    
    /**
     * Result 结果类
     */
    public class Result<T> implements Serializable {
    
        private static final long serialVersionUID = -1525914055479353120L;
        /**
         * 错误码
         */
        private final String code;
        /**
         * 提示信息
         */
        private final String message;
        /**
         * 返回数据
         */
        private final T data;
        /**
         * 是否成功
         */
        private final Boolean success;
    
        /**
         * 构造方法
         *
         * @param code    错误码
         * @param message 提示信息
         * @param data    返回的数据
         * @param success 是否成功
         */
        public Result(String code, String message, T data, Boolean success) {
            this.code = code;
            this.message = message;
            this.data = data;
            this.success = success;
        }
    
        /**
         * 创建 Result 对象
         *
         * @param code    错误码
         * @param message 提示信息
         * @param data    返回的数据
         * @param success 是否成功
         */
        public static <T> Result<T> of(String code, String message, T data, Boolean success) {
            return new Result<>(code, message, data, success);
        }
    
        /**
         * 成功,没有返回数据
         *
         * @param <T> 范型参数
         * @return Result
         */
        public static <T> Result<T> success() {
            return of("00000", "成功", null, true);
        }
    
        /**
         * 成功,有返回数据
         *
         * @param data 返回数据
         * @param <T>  范型参数
         * @return Result
         */
        public static <T> Result<T> success(T data) {
            return of("00000", "成功", data, true);
        }
    
        /**
         * 失败,有错误信息
         *
         * @param message 错误信息
         * @param <T>     范型参数
         * @return Result
         */
        public static <T> Result<T> fail(String message) {
            return of("10000", message, null, false);
        }
    
        /**
         * 失败,有错误码和错误信息
         *
         * @param code    错误码
         * @param message 错误信息
         * @param <T>     范型参数
         * @return Result
         */
        public static <T> Result<T> fail(String code, String message) {
            return of(code, message, null, false);
        }
    
    
        /**
         * 获取错误码
         *
         * @return 错误码
         */
        public String getCode() {
            return code;
        }
    
        /**
         * 获取提示信息
         *
         * @return 提示信息
         */
        public String getMessage() {
            return message;
        }
    
        /**
         * 获取数据
         *
         * @return 返回的数据
         */
        public T getData() {
            return data;
        }
    
        /**
         * 获取是否成功
         *
         * @return 是否成功
         */
        public Boolean getSuccess() {
            return success;
        }
    }
    
    1. 系统异常类
    package com.abu.stream;
    
    /**
     * 系统异常类
     */
    public class SystemException extends RuntimeException {
    
    
        private static final long serialVersionUID = 8312907182931723379L;
        /**
         * 错误码
         */
        private String code;
    
    
        /**
         * 构造一个没有错误信息的 <code>SystemException</code>
         */
        public SystemException() {
            super();
        }
    
    
        /**
         * 使用指定的 Throwable 和 Throwable.toString() 作为异常信息来构造 SystemException
         *
         * @param cause 错误原因, 通过 Throwable.getCause() 方法可以获取传入的 cause信息
         */
        public SystemException(Throwable cause) {
            super(cause);
        }
    
        /**
         * 使用错误信息 message 构造 SystemException
         *
         * @param message 错误信息
         */
        public SystemException(String message) {
            super(message);
        }
    
        /**
         * 使用错误码和错误信息构造 SystemException
         *
         * @param code    错误码
         * @param message 错误信息
         */
        public SystemException(String code, String message) {
            super(message);
            this.code = code;
        }
    
        /**
         * 使用错误信息和 Throwable 构造 SystemException
         *
         * @param message 错误信息
         * @param cause   错误原因
         */
        public SystemException(String message, Throwable cause) {
            super(message, cause);
        }
    
        /**
         * @param code    错误码
         * @param message 错误信息
         * @param cause   错误原因
         */
        public SystemException(String code, String message, Throwable cause) {
            super(message, cause);
            this.code = code;
        }
    
        /**
         * @param errorCode ErrorCode
         */
        public SystemException(ErrorCode errorCode) {
            super(errorCode.getMessage());
            this.code = errorCode.getCode();
        }
    
        /**
         * @param errorCode ErrorCode
         * @param cause     错误原因
         */
        public SystemException(ErrorCode errorCode, Throwable cause) {
            super(errorCode.getMessage(), cause);
            this.code = errorCode.getCode();
        }
    
        /**
         * 获取错误码
         *
         * @return 错误码
         */
        public String getCode() {
            return code;
        }
    
    
    }
    

标签:code,Java,String,param,最佳,Result,return,message,public
From: https://www.cnblogs.com/party-abu/p/17524436.html

相关文章

  • Java--大数运算时的溢出问题
    Java--大数运算时的溢出问题一、前言​JDK7新特性,数字之间可以用下划线进行分割,便于阅读。二、代码示例publicclassDemo01{publicstaticvoidmain(String[]args){intmoney=10_0000_0000;intyears=20;inttotal1=money......
  • Java学习第一天 / 常用的DOS命令
     #盘符命令盘名+:#查看当前目录下多有文件dir#切换目录cd(changedirectory)#回上一个步骤cd..#清理屏幕cls(clearscreen)#退出终端exit#查看电脑IPipconfig#打开应用calcmspaintnotepad#ping命令ping+......
  • JavaSE
    Java基本数据类型Java提供了八种基本类型,包括六种数字,一种字符,一种布尔:publicclassTest{publicstaticvoidmain(String[]args){inti=8;System.out.println(i);//8System.out.println(i/3);//2(int->int)Floatf=......
  • 【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引
     目录 【Java全栈学习路线】前言目录一、JavaSE基础二、JavaWeb三、JavaEE四、Linux运维五、分布式与微服务六、大数据开发  一、JavaSE基础 JavaSE基础知识的学习是为了后边走的更远~文章链接1.计算机基础【JavaSE】之计算机基础2.Java入......
  • 桶排序算法及其Java实现
    桶排序是一种排序算法,它的原理是将数组分到有限数量的桶里,每个桶再个别排序,最后依次把各个桶中的记录列出来。桶排序的效率取决于映射函数的选择和桶的数量。桶排序适用于数据分布比较均匀,或者比较侧重于区间数量的情况。下面是我为你写的博客正文,希望对你有帮助:桶排序算法及其J......
  • 汇报 第二周第二天 JAVA方法
    今日所学:掌握定义Java方法时的语法格式及各个参数的作用;掌握方法的有无返回值的两种情况的处理方式;掌握方法的参数是值参数、引用参数或者不定长参数的使用方法;明确方法的重载和使用方法 明日计划:JAVA中的面向对象编程遇到困难:练车真坐牢......
  • JavaScript(四)面向对象
    创建对象prototype对象JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。当我们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到Object.prototype对象,最后,如果还没有找到,就只能返......
  • JAVA调用ABAP RFC接口-DEMO
    packagecom.swift.oa;importcom.sap.conn.jco.*;/***@Author:Wriprin*@Date:2022/11/2517:20*@Version1.0*/publicclassGetMaraInfo{publicstaticvoidmain(String[]args)throwsJCoException{//ConfigurationofSAPconnec......
  • JavaScript(三)Array的高阶函数
    map、reducemap:map()方法定义在JavaScript的Array中,接收一个函数对象作为参数,函数定义运算规则,对array中的每个元素进行运算,结果是一个新的array。functionpow(x){returnx*x;}vararr=[1,2,3,4,5,6,7,8,9];varresults=arr.map(pow);//[1,4,9......
  • JavaScript(一)基础
    JS引入到文件嵌入到html文件中,在<header>或<body>中使用<script><script> vari=10; console.log(i);</script>引入JS文件,在<header>或<body>中使用<script><scriptsrc="./index3_script.js"type="text/j......