精华内容
下载资源
问答
  • 在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?
    千次阅读
    2021-04-26 14:48:05

    点击查看在MATLAB中运行程序时,显示错误: 此上下文中不允许函数定义。 怎么修改?具体信息

    答:MATLAB程序运行错误后,切换到MATLAB命令行中,观察命令行中的错误信息,确定错误原因。 1、你可能写了个脚本程序文件,其中定义了子函数,在运行时就弹出了这个提示。一般情况下,在函数文件中才能定义子函数,在脚本文件中不允许定义子函数。...

    答:从你讲的问题,虽然没讲太清楚,但我推测,你可能写了个脚本程序文件,其中定义了子函数,在运行时就弹出了这个提示。一般情况下,在函数文件中才能定义子函数,在脚本文件中不允许定义子函数。这是个基本的要求。

    答:因为函数的定义是不能在命令行窗口进行的,你需要新建一个函数脚本,然后在里面定义函数,保存,最后在命令行窗口进行调用就可以了

    答:直接粘贴你的代码到m文件中运行也是这个样子 研究一下你的代码做了以下改正: 把A=[2,2,3,4,5,6,1,2,66,7,35,23,5,36,7,1,2,3,1,3,11,14,51,2,78,8,7,26,23,11];这个单独放在命令行运行 将p_judge函数封装起来,并且保存为命名为p_judge.m的文件...

    答:matlab中,函数的定义与实现应该放到单独的m文件中。 如果需要调用这个函数,直接调用就行了。不用加function。 也就是说,你把ds这个函数写到其他的m文件中,并保存。 之后,这个单独的m文件就作为函数来进行调用。

    答:其实代码是正确的,问题在于代码包括两个文件,一个是function文件“calLength.m”,一个是script文件(可以命名为“tmp_01.m”);并且执行tmp_01.m时,输入也要满足特定格式。具体如下: “calLength.m”的内容是: function segs=calLength(P1,P2)s...

    答:你创建的getheading1.m是一个script文件而不是function文件,在matlabR2016a之前的版本不允许在script里定义function,建议把function写在另一个文件。另外,我觉得你的程序写的是有其他问题的,但没有完整程序及其需求没法debug,当然也不提供...

    答:你那个Untitled2不是函数吧 不是函数的话,不能在里面定义函数, 函数的文件里面可以嵌套定义函数 你把AHPInit1那个函数代码拿出来单独写一个AHPInit1.m文件,并和Untitled2.m保存在同一目录下 (另外,你还可以看看function以及同一行后面的括...

    答:可能你的程序格式有问题。如把代码集成在一起,可以来写 function ode45_main( ) clear all;%清除内存中的变量和和函数 tspan=[0,0.245]; %定义变量的求解区间 y0=[0.449/0.09846,0.1021/0.09846,0.1057/0.09846,0.019/0.09846,0.2327/0.09846,0...

    答:定义函数必须在M文件内编辑才行,不然运行不了

    答:从你讲的问题,虽然没讲太清楚,但我推测,你可能写了个脚本程序文件,其中定义了子函数,在运行时就弹出了这个提示。一般情况下,在函数文件中才能定义子函数,在脚本文件中不允许定义子函数。这是个基本的要求。

    答:matlab提供的C/C++编译器,将m文件编译成可执行的应用程序。 MATLAB中的操作 1.没有使用图形相关的函数 由于MATLAB的编译器只能对函数m文件进行编译,所以如果原来的程序是脚本程序应改写成函数形式。举例如下: 建立一个m文件test1.m,内容如...

    答:题主是把代码直接贴到命令窗口里运行的吧? 用function定义的函数必须保存成M文件才能运行。 如果已经保存到M文件,那就是在function之前还有其它代码。function必须出现在有效代码的最前面(所谓有效,是指不包括注释之类的内容)。

    答:只有m文件中才允许定义函数,可以并列的也可以嵌套的。 在命令行中不能出现function这个关键词。

    答:函数定义要写在脚本里,不要写在命令行里。

    答:只有在m文件中定义的第一个函数才可以在命令窗口直接调用,并且文件名字必须和函数名字相同。命令窗口是不能定义函数的

    答:你试图在命令窗口定义函数,这种做法是错误的。 你需要建立一个.m文件,文件名是Chebyshev.m,然后在里面输入源程序。

    答:应该是if A(i-1,j-1,1)==255;吧...

    答:怎么会不允许呢,如果你的函数不让定义,最可能的情况是,你定义的函数在MATLAB中已有这个函数,比如你不能定义for,while等,以及定义的函数与MATLAB工具箱中的函数名相同,建议将你定义的函数首字母大写,MATLAB中是区分大小写的,或者你定义...

    答:主要是因为在下面的几个式子中没有出现t,所以,提示输入参数t 无用,可用~代替。但在解微分方程时,这个t不能少。因此,可不管提示,维持原样。

    确定错误原因。 1、你可能写了个脚本程序文件,其中定义了子函数,在运行时就弹出了这个提示。一般情况下,在函数文件中才能定义子函数,在脚本文件中不允许定义子函数。这...

    用function定义的函数必须保存成M文件才能运行。 如果已经保存到M文件,那就是在function之前还有其它代码。function必须出现在有效代码的最前面(所谓有效,是指不包括注释...

    咦?其他显示正常,怎么又冒出一个未对输出参数进行赋值的错误,我仔细的看了看代码,... 中没有一个对f赋值的代码,果断判断是不是不需要输出的。就把f=给去掉了。在运行看看...

    定义函数必须在M文件内编辑才行,不然运行不了

    写好之后不要直接运行,在外边调用,不然相当于你没有给x

    定义 子程序、函数,或属性 47DLL 应用程序的客户端过多 48装入 DLL 时发生错误 49... 显示的所有者窗体 380属性值无效 381无效的属性数组索引 382属性设置不能在运行...

    定义 子程序、函数,或属性 47 DLL 应用程序的客户端过多 48 装入 DLL 时发生错误 49... 385 需要属性数组索引 387 属性设置不允许 393 属性的取得不能在运行时完成 394 属...

    快速模式要求显示声明变量。这有助于避免出现前面提到的各种错误,并可产生运行得... 不允许的。如果您的脚本使用了此功能,则必须修改脚本。可以在全局范围内定义函数,...

    在实际工程中经常数据的缺失或者不完整,此时我们可以将那些缺失设置为nan,Matlab处... 某个字符不是数据,那么Matlab自动将它认为nan处理 比如Matlab中提供的nanmean, n...

    M = mean(A) 返回沿数组中不同维的元素的平均值。 如果A是一个向量,mean(A)返回A中元素的平均值。 如果A是一个矩阵,mean(A)将中的各列视为向量,把矩阵中的每列看...

    matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数

    2+eps==2%true,说明matlab无法区分2和2+eps 1+eps==1%false,说明matlab可以区分1和1+eps,因此1的精度比2高 0的精度是最高的,也就是说eps(0)才是matlab所能表示的...

    matlab中用转义符来输入希腊字母的方法 上标用 ^(指数) 下标用 _(下划线) 希腊字母等特殊字符用 \加拼音 如 α \alpha β \beta γ \gamma θ \...

    matlab中共有六种数据类型,分别为数值、字符、逻辑、结构、细胞、类。 其中细胞就是你这里的cell类型数据。 A{i}.flag=-1; A{i}.status=zeros(1,13); 实际上是在A{i}中储...

    该函数用于求特征多项式 poly(A) 当A是一个N*N矩阵式,poly(A)命令求出A的特征多项式 det(lambda*eye(size(A))-A) 当V是向量时,命令poly(A)生成以V为根的多项式 参考 >...

    function用来定义函数,一般一个函数放在一个.m文件里。举个简单的例子建立一个myfunction.m,然后在文件中写。 function y=myfunction(a,b) 其中a,b是输入函数的参数,y是函...

    >> A=[ 1 12 7 3 8 5 4 3 6]; A=[A(1,:);[0 1 2];A(2:3,:)] A = 1 12 7 0 1 2 3 8 5 4 3 6

    上面的都说得不够详细,一楼且说错了(不是大写的SQRT)。我稍微给总结下吧: 在matlab中,表示根号常用: 1.如果是一个数字,比如5,表示它的根号用下面三个是等效的,都可正确...

    更多精彩内容推荐:

    更多相关内容
  • java异常和错误定义规范及其使用

    万次阅读 2019-07-29 18:45:00
    前言 本随笔是最近进行实际项目开发时总结的一些经验,可供需要的伙伴借鉴。 如有不足之处欢迎评论指正。 ...使用java提供服务的...我要定义哪些自定义异常? 捕获到一个"未知"异常时,我该将其抛出去还是就地打...

    前言

    • 本随笔是最近进行实际项目开发时总结的一些经验,可供需要的伙伴借鉴。
    • 如有不足之处欢迎评论指正。

     

    场景

    • 使用java提供服务的后端系统,使用者(可能是web前端或者是第三方调用者)通过api形式进行调用。

     

    以前可能遇到的问题

    • 这里会不会发生异常?如果发生了我应该怎么做?
    • 我要定义哪些自定义异常?
    • 捕获到一个"未知"异常时,我该将其抛出去还是就地打印其堆栈信息?

     

    问题分析

    • 为什么会产生异常?
        简单理解就是,异常是程序执行过程中未按预想状态执行的状态。
    • 为什么要自定义异常?
        1)与系统(这里指的是非本项目)异常做区分,这样我们就能争对不同的异常做不同的事情。
        2)自定义异常也是一个自定义对象,可以携带一些额外的信息。
    • 异常产生之后应该做什么?
        1)打印异常堆栈:这种情况下,一般需要运维或开发人员定位问题并人工解决,因为堆栈是打印给人看的,要不然也就不打印了
        2)执行候选方案等(可能也需要打印堆栈)

     

    对异常进行分类

    • 集合项目和业务逻辑对可能产生的异常做分类。不管系统是干什么的,我们都可以将其分为“系统异常”和“非系统异常”,如果觉得太笼统可以将他们二者进行细分(最后你可能会发现没有细分的必要)。
        系统异常: 这类异常通常是大致地提示使用方系统不可用,同时需要相关人员更进处理的
        非系统异常:这类异常通常是一些义务逻辑而已,比如检查到用户参数有误后抛出的异常
    • 异常分类原则:先明确定义好什么样的系统属于系统异常,什么样的异常属于自定义异常,当捕获到一个异常或产生错误时,看这个异常是哪种场景,然后在归类。
    • 对分类异常进行处理。既然我们抛出了异常,那就得对其进行捕获处理,如果你的系统设计很好,那么一般情况是对异常进行统一捕获,这种情况下可能会先捕获我们自定义异常,然后再捕获最大异常,由于自定义异常一般已经携带了相关的错误信息,所以我们很容易控制返回给调用者的,所以要争对最大异常定义一个默认的返回值。

     

    正确对待第三方工具(依赖)抛出的异常

    • 经过上面的定义,对于自己代码产生的异常可能有一个较好的解决方案了,但是捕获到别人抛出的异常时,可能就不知所措(刚开始我就是这样),这时候再回去看看刚刚的描述或许就会更加清晰了,如果抛异常的代码不是我们的依赖,而是我们项目的一部分,那么你肯定也能清楚的知道这个异常在我们的系统中属于一个怎样的级别。从关系上看,我们是依赖方,所以被依赖方不可能使用依赖方定义的异常。
    • 所以当我们捕获到一个依赖方的异常时,需要判断这个异常级别应该对应于我们系统已经定义的哪个异常,然后转换为我们自己定义的异常即可,这里要注意,如果这个异常是需要打印错误堆栈的,那么我们绝对不能把原来的异常直接扔掉,最好是将其作为嵌套异常包含在我们的自定义异常中再将其抛出,这就相当于给依赖方抛出的异常贴上一个标签,以便我们能进行统一捕获处理。

     

    用有限的异常类处理义务中复杂多变的无限可能

      这个问题,其实大家都在使用,那就是配合错误码使用。和定义异常类一样的到了,定义和使用错误码的时候也要将其归类定义,避免重复定义和混乱使用。而且到最后你一定会发现,所定义的错误码大部分是业务错误码居多,即该错误码明确代表了一个错误码描述,而这个错误描述是给调用方看的,而系统级别的异常详细信息已经堆栈形式在日志中打印出来了,那不同的错再多定义一个错误码也意义不大。当然,如果要通过错误码对异常分类进行统计的情况除外,但是如果一个系统已经到了这个地步的话基本可以选择其他方案了。

     

    异常类和错误码定义示例

    需求

    • 对本系统的异常类型进行抽象并定义相应的异常。
    • 自定义错误对象能携带相关的错误信息,以便能统一进行捕获处理
    • 需要保证错误码不会混乱使用,即“系统级别”类错误码只能用于“系统”类异常,不能混乱使用

     

    示例代码

    public interface ErrorCode {
      String getErrorCode();
      String getErrorDesc();
    }
    获取错误码及其错误描述信息接口定义
    /**
     * 用户异常错误码枚举
     */
    public enum UserErrorCode implements ErrorCode {
      /**
       * 用户名错误
       */
      USERNAME_ERR("username-err", "用户名错误"),
      /**
       * 密码错误
       */
      PASSWORD_ERR("PASSWORD-ERR", "密码错误"),
      ;
    
      UserErrorCode(String errorCode, String errorDesc) {
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
      }
    
      // 错误码.
      @Getter
      private String errorCode;
      // 错误码对应的外部描述信息.
      @Getter
      private String errorDesc;
    }
    用户异常错误码枚举示例
    /**
     * 系统异常错误码枚举
     */
    public enum SystemErrorCode implements ErrorCode {
      /**
       * 系统内部错误
       */
      SYSTEM_ERR("system-err", "系统内部错误"),
      ;
    
      SystemErrorCode(String errorCode, String errorDesc) {
        this.errorCode = errorCode;
        this.errorDesc = errorDesc;
      }
    
      @Getter
      private String errorCode;
      @Getter
      private String errorDesc;
    }
    系统异常错误码枚举示例

    import lombok.Getter;
    
    /**
     * 这里定义的是用户级别的异常类,只允许通过用户级别的错误码进行构建异常对象
     * 其他异常定义同本示例.
     */
    public class UserException extends RuntimeException implements ErrorCode {
    
      @Getter
      private String errorCode;
      @Getter
      private String errorDesc;
    
      /**
       * @param errorCode 枚举的错误码类型,其中包含了错误码和对应的错误码描述信息.
       */
      public UserException(UserErrorCode errorCode) {
        super();
        this.errorCode = errorCode.getErrorCode();
        this.errorDesc = errorCode.getErrorDesc();
      }
    
      /**
       * @param errorCode 枚举的错误码类型,其中包含了错误码和对应的错误码描述信息.
       * @param message   最好是自定义的详细描述信息,用于打日志,也可以和{@link ErrorCode#getErrorDesc()}相同
       */
      public UserException(UserErrorCode errorCode, String message) {
        super(message);
        this.errorCode = errorCode.getErrorCode();
        this.errorDesc = errorCode.getErrorDesc();
      }
    
      /**
       * @param errorCode 枚举的错误码类型,其中包含了错误码和对应的错误码描述信息.
       * @param cause     嵌套的错误堆栈
       */
      public UserException(UserErrorCode errorCode, Throwable cause) {
        super(cause);
        this.errorCode = errorCode.getErrorCode();
        this.errorDesc = errorCode.getErrorDesc();
      }
    
      /**
       * @param errorCode 枚举的错误码类型,其中包含了错误码和对应的错误码描述信息.
       * @param message   最好是自定义的详细描述信息,用于打日志,也可以和{@link ErrorCode#getErrorDesc()}相同
       * @param cause     嵌套的错误堆栈
       */
      public UserException(UserErrorCode errorCode, String message, Throwable cause) {
        super(message, cause);
        this.errorCode = errorCode.getErrorCode();
        this.errorDesc = errorCode.getErrorDesc();
      }
    }
    异常类定义示例(用户级别异常)

    ps: 当你看完上述异常类的定义之后,那你一定知道为什么错误码定义要用枚举了,其实只要是除了字符串就行,否则会和官方默认的冲突,官方的默认字符串表示该异常的描述性信息,而我们的不仅要利用描述信息同时能在堆栈中打印的特性,还需要将我们错误码和错误码描述信息一同传入(这里的描述信息一般是传到到调用方的,不是用来打日志的,所以这两处的描述一般是不相同的),一次传入多个信息,所以自定义对象似乎是我们最好的选择。

     

    如有不足之处欢迎留言交流。

     

     参考文献

    https://blog.csdn.net/qq_31463999/article/details/79220394

    转载于:https://www.cnblogs.com/laeni/p/11265101.html

    展开全文
  • 架构之全局错误异常定义

    千次阅读 多人点赞 2019-11-27 14:37:02
    这里我们使用了自定义错误码,并将错误定义在了错误码枚举类中,当然如果你的系统比较庞大,错误码非常多,并且要实现错误码的动态调整,那么也可以将错误码存在数据库中,启动后放到内存缓存,这里为了方便大家...

    异常简介

    说明

    一个开发框架少不了异常处理机制,让所有的错误集中在一个地方处理,在业务代码开发的时候,往外抛就可以了,由上层统一拦截处理、返回给调用方。这里我们使用了自定义错误码,并将错误码定义在了错误码枚举类中,当然如果你的系统比较庞大,错误码非常多,并且要实现错误码的动态调整,那么也可以将错误码存在数据库中,启动后放到内存缓存,这里为了方便大家理解只是提前将错误码定义在了枚举类中。

    UML图

    自定义异常异常处理

    异常定义

    错误码定义

    通过实现此接口扩展应用程序中的错误代码

    public interface ErrorCodeI {
    
        public String getErrCode();
    
        public String getErrDesc();
    
    }
    

    基础错误码定义

    定义3个基本错误代码

    public enum BasicErrorCode implements ErrorCodeI {
    
        BIZ_ERROR("BIZ_ERROR" , "通用的业务逻辑错误"),
    
        ZCB_ERROR("ZCB_FRAMEWORK_ERROR" , "ZCB框架错误"),
    
        SYS_ERROR("SYS_ERROR" , "未知的系统错误" );
    
        private String errCode;
    
        private String errDesc;
    
        private BasicErrorCode(String errCode, String errDesc){
            this.errCode = errCode;
            this.errDesc = errDesc;
        }
    
        @Override
        public String getErrCode() {
            return errCode;
        }
    
        @Override
        public String getErrDesc() {
            return errDesc;
        }
    }
    

    基础异常信息定义

    基异常是所有异常的父级,需要继承运行时异常RuntimeException

    public abstract class BaseException extends RuntimeException{
    
        private static final long serialVersionUID = 1L;
        
        private ErrorCodeI errCode;
        
        public BaseException(String errMessage){
            super(errMessage);
        }
        
        public BaseException(String errMessage, Throwable e) {
            super(errMessage, e);
        }
        
        public ErrorCodeI getErrCode() {
            return errCode;
        }
        
        public void setErrCode(ErrorCodeI errCode) {
            this.errCode = errCode;
        }
        
    }

    框架异常定义

    扩展框架的基础结构异常

    public class ZCBException extends BaseException {
        
        private static final long serialVersionUID = 1L;
        
        public ZCBException(String errMessage){
            super(errMessage);
            this.setErrCode(BasicErrorCode.ZCB_ERROR);
        }
        
        public ZCBException(String errMessage, Throwable e) {
            super(errMessage, e);
            this.setErrCode(BasicErrorCode.ZCB_ERROR);
        }
    }

    通用业务异常定义

    扩展框架的业务已知异常

    public class BizException extends BaseException {
    
        private static final long serialVersionUID = 1L;
    
        public BizException(String errMessage){
            super(errMessage);
            this.setErrCode(BasicErrorCode.BIZ_ERROR);
        }
    
        public BizException(ErrorCodeI errCode, String errMessage){
            super(errMessage);
            this.setErrCode(errCode);
        }
    
        public BizException(String errMessage, Throwable e) {
            super(errMessage, e);
            this.setErrCode(BasicErrorCode.BIZ_ERROR);
        }
    }

    系统异常定义

    扩展框架系统意外异常

    public class SysException extends BaseException {
    
        private static final long serialVersionUID = 4355163994767354840L;
    
        public SysException(String errMessage){
            super(errMessage);
            this.setErrCode(BasicErrorCode.SYS_ERROR);
        }
    
        public SysException(ErrorCodeI errCode, String errMessage) {
            super(errMessage);
            this.setErrCode(errCode);
        }
    
        public SysException(String errMessage, Throwable e) {
            super(errMessage, e);
            this.setErrCode(BasicErrorCode.SYS_ERROR);
        }
    
        public SysException(String errMessage, ErrorCodeI errorCode, Throwable e) {
            super(errMessage, e);
            this.setErrCode(errorCode);
        }
    }
    

    异常处理

    异常处理接口定义

    ExceptionHandlerI提供了一个后门,应用程序可以覆盖默认的异常处理

    public interface ExceptionHandlerI {
        public void handleException(Command cmd, Response response, Exception exception);
    }
    

    异常处理工厂

    这里提供一种扩展机制,如果自己有实现异常处理机制,则执行自定义的异常处理,没有就走默认的异常处理机制。

    public class ExceptionHandlerFactory {
    
        public static ExceptionHandlerI getExceptionHandler(){
            try {
                return ApplicationContextHelper.getBean(ExceptionHandlerI.class);
            }
            catch (NoSuchBeanDefinitionException ex){
                return DefaultExceptionHandler.singleton;
            }
        }
    
    }

    默认异常处理

    默认捕获异常并打印日志,并在对应的返回信息返回错误码。

    public class DefaultExceptionHandler implements ExceptionHandlerI {
    
        private Log logger = LogFactory.getLog(ExtensionExecutor.class);
    
        public static DefaultExceptionHandler singleton = new DefaultExceptionHandler();
    
        @Override
        public void handleException(Command cmd, Response response, Exception exception) {
            buildResponse(response, exception);
            printLog(cmd, response, exception);
        }
    
        private void printLog(Command cmd, Response response, Exception exception) {
            if(exception instanceof BaseException){
                //biz exception is expected, only warn it
                logger.warn(buildErrorMsg(cmd, response));
            }
            else{
                //sys exception should be monitored, and pay attention to it
                logger.error(buildErrorMsg(cmd, response), exception);
            }
        }
    
        private String buildErrorMsg(Command cmd, Response response) {
            return "Process ["   cmd   "] failed, errorCode: "
                      response.getErrCode()   " errorMsg:"
                      response.getErrMessage();
        }
    
        private void buildResponse(Response response, Exception exception) {
            if (exception instanceof BaseException) {
                ErrorCodeI errCode = ((BaseException) exception).getErrCode();
                response.setErrCode(errCode.getErrCode());
            }
            else {
                response.setErrCode(BasicErrorCode.SYS_ERROR.getErrCode());
            }
            response.setErrMessage(exception.getMessage());
            response.setSuccess(false);
        }
    }

    异常处理调用

    在最上层框架进行调用,为异常处理的总入口。

        public Response invoke(Command command) {
            Response response = null;
            try {
                preIntercept(command);
                response = commandExecutor.execute(command);  
            }
            catch(Exception e){
                response = getResponseInstance(command);
                response.setSuccess(false);
                ExceptionHandlerFactory.getExceptionHandler().handleException(command, response, e);
            }
            finally {
                //make sure post interceptors performs even though exception happens
                postIntercept(command, response);
            }          
            return response;
        }

    使用场景

    系统异常

        public static<T> T getBean(Class<T> targetClz){
            T beanInstance = null;
            //优先按type查
            try {
                beanInstance = (T) applicationContext.getBean(targetClz);
            }catch (Exception e){
            }
            //按name查
            if(beanInstance == null){
                String simpleName = targetClz.getSimpleName();
                //首字母小写
                simpleName = Character.toLowerCase(simpleName.charAt(0))   simpleName.substring(1);
                beanInstance = (T) applicationContext.getBean(simpleName);
            }
            if(beanInstance == null){
                new SysException(BasicErrorCode.SYS_ERROR, "Component "   targetClz   " can not be found in Spring Container");
            }
            return beanInstance;
        }

    业务异常

     public static void notNull(Object object, ErrorCodeI errorCode, String message) {
            if (object == null) {
                throw new BizException(errorCode, message);
            }
        }

    自定义异常

     private void checkNull(BizScenario bizScenario){
            if(bizScenario == null){
                throw new ZCBException("BizScenario can not be null for extension");
            }
        }

    个人网站:http://www.cnzcb.cn

    本文由博客一文多发平台 OpenWrite 发布!

    展开全文
  • Java异常封装(自己定义错误码和描述,附源码)

    万次阅读 多人点赞 2016-01-29 22:30:54
    当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述。下面小宝鸽就为大家介绍一个Java异常简单封装的例子。在给出异常分装例子之前,需要给大家普及Java里面的checked异常和unchecked...

    真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的。什么时候该抛出什么异常,这个是必须知道的。

    当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述。

    下面小宝鸽就为大家介绍一个Java异常简单封装的例子。

    在给出异常分装例子之前,需要给大家普及Java里面的checked异常和unchecked异常的个概念。

    一、checked异常和unchecked异常

    这里之所以让大家清楚checked异常和unchecked异常概念,是因为:待会我们的异常是继承unchecked异常RuntimeException的。了解一下并无坏处嘛

    checked异常:

    表示无效,不是程序中可以预测的。比如无效的用户输入,文件不存在,网络或者数据库链接错误。这些都是外在的原因,都不是程序内部可以控制的。

    必须在代码中显式地处理。比如try-catch块处理,或者给所在的方法加上throws说明,将异常抛到调用栈的上一层。

    继承自java.lang.Exception(java.lang.RuntimeException除外)。

    unchecked异常:

    表示错误,程序的逻辑错误。是RuntimeException的子类,比如IllegalArgumentException, NullPointerException和IllegalStateException。

    不需要在代码中显式地捕获unchecked异常做处理。

    继承自java.lang.RuntimeException(而java.lang.RuntimeException继承自java.lang.Exception)。

    看下面的异常结构图或许层次感更加深些:

    这里写图片描述

    二、异常分装实例

    2.1、添加一个枚举LuoErrorCode.java如下:

    package com.luo.errorcode;
    
    public enum LuoErrorCode {
    
        NULL_OBJ("LUO001","对象为空"),
        ERROR_ADD_USER("LUO002","添加用户失败"),
        UNKNOWN_ERROR("LUO999","系统繁忙,请稍后再试....");
    
        private String value;
        private String desc;
    
        private LuoErrorCode(String value, String desc) {
            this.setValue(value);
            this.setDesc(desc);
        }
    
        public String getValue() {
            return value;
        }
    
        public void setValue(String value) {
            this.value = value;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        @Override
        public String toString() {
            return "[" + this.value + "]" + this.desc;
        }
    }

    注意!!!这里我们重写了LuoErrorCode的toString方法,至于为什么要这样,后面会提到,客观请继续看。

    2.2、创建一个异常类BusinessException.java,继承RuntimeException:

    package com.luo.exception;
    
    public class BusinessException extends RuntimeException {
    
        private static final long serialVersionUID = 1L;
    
        public BusinessException(Object Obj) {
            super(Obj.toString());
        }
    
    }
    

    这里的代码虽然短,但是有两点需要注意的!!!第一点是其继承了RuntimeException,因为一般我们的业务异常都是运行时异常。第二点,这里的构造方法调用父方法super(Obj.toString());,这就是重写了LuoErrorCode的toString方法的原因了,如果还不明白,看完后面的你就明白了。

    2.3、测试类ExceptionTest.java:

    package com.luo.test;
    
    import com.luo.errorcode.LuoErrorCode;
    import com.luo.exception.BusinessException;
    
    public class ExceptionTest {
    
        public static void main(String args[]) {
            Object user = null;
            if(user == null){
                throw new BusinessException(LuoErrorCode.NULL_OBJ);
            }
        }
    }

    运行结果:

    这里写图片描述

    补充一下:在我们实际项目里面,比如别人调用你接口,你可能需要先看他传过来的对象是不是空的,先判断如果传过来的对象为空给有友好的提示”[LUO001]对象为空”,不然后面的代码估计会出现空指针异常了。

    一般公司都会分装一个基础框架,异常分装是其中一部分,当然他们对异常的分装肯定比我这个例子复杂多,因此本例仅供参考!

    如果懒得copy和paste的话,直接下载工程吧:

    http://download.csdn.net/detail/u013142781/9422684

    展开全文
  • 常见的十二种逻辑谬误

    千次阅读 2020-12-05 16:13:36
    定义 偷换概念是指在论证过程中将一些似乎一样的概念进行偷换,实际上改变了概念的修饰语、适用范围、所指对象等具体内涵。 如何有效分析逻辑谬误 上述论述中,A 和 B 是两个不同的概念,前者的意思是XXX,而后者的...
  • 逻辑错误才是运行期错误。  语法错误是不符合语法规则出现的问题。  常见的语法错误如:  Java代码  1.变量可能未初始化   int i;   System.out.println(i);    2.变量
  • 定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替换成宏定义中替换列表中的内容。常见的宏定义有两种,不带参数的宏...
  • 本博文并一定适合其他原因引起的未定义错误,仅适合“已经定义了xxx,但却报没定义的错”这种情况; 如有不足之处,还请多多指教; 迷之错误:error: #20: identifier “xxx” is undefined 实际上我是定义了xxx的...
  • 程序书写本身没错,编译链接能够完成,但输出结果与预期不符,或着执行着便崩溃掉,称为逻辑错误 编译错误主要有两类: 语法问题,缺少符号,如缺分号,缺括号等,符号拼写不正确,一般来说,编译器都会指明错误...
  • 配置大致说流程, 首先我们自定义一个自己的异常类CustomException,继承RuntimeException。再写一个异常管理类ExceptionManager,用来抛出自定义的异常。 然后使用Spring提供的注解@RestControllerAdvice或者@...
  • 最近在学习数据结构,有必要对自己这两天的学习做一个总结,今天就来总结,数据结构的逻辑结构 按照分类标准的不同,我们把数据结构分为逻辑机构和存储结构,今天主要讲解逻辑结构 逻辑结构:是指数据对象中的...
  • 【清华大学】《逻辑学概论》笔记

    万次阅读 多人点赞 2020-09-04 01:32:03
    教学视频来源 概要 讲师介绍 陈为蓬 清华大学人文学院 副教授 课程内容 第1讲 什么是逻辑学? 第2讲 逻辑学的产生与发展 第3讲 命题联结词及其基本推理形式 第4讲 复合命题的推理:...1.1 “逻辑逻辑学 什么是逻辑
  • 逻辑综合

    千次阅读 2019-07-30 20:16:54
    利用工具将RTL代码转换为门级网表的过程叫做逻辑综合(Logic Synthesis),常见的逻辑综合工具是synopsys的design compile(DC); 综合一个设计的过程从读取RTL代码开始,通过施加时序约束关系,映射 产生一个门级...
  • 华为2020届逻辑笔试

    万次阅读 多人点赞 2020-09-06 14:35:18
    C选项状态机简写为FSM(Finite State Machine),也称为同步有限状态机,我们一般简称为状态机,之所以说是同步的,是因为状态机中所有的状态跳转都是在时钟的作用进行的,所以必须用到时序逻辑,我们一般用状态...
  • Python数据类型——逻辑值详解

    千次阅读 多人点赞 2020-05-17 17:57:44
    在上一篇博客:Python数据类型——数值型详解 中介绍了Python数据类型中数值型部分。本篇我们来一块学习一下Python数值类型的逻辑值与字符串部分。
  • 关于业务主键和逻辑主键的思考 这几天对逻辑主键、业务主键和复合主键进行了一些思考,也在网上搜索了一下相关的讨论,相关讨论可以看最下面的参考链接。...定义(部分定义来源于 SQL Server 联机丛书): 主键(...
  • 华为硬件逻辑岗笔试题(一)

    千次阅读 2021-02-25 12:43:38
    积少成多,集腋成裘,坚持!!! 目录 ...11. 组合逻辑和时序逻辑判断 13. 基本总线的理解 14.加法器 15.FPGA开发工具 1. 进制转换 1、十进制46.25对应的二进制表达式为( )。 A 101110.11...
  • 几道经典逻辑推理题,提高你的逻辑思考能力

    万次阅读 多人点赞 2019-10-20 17:11:17
    整理了一些逻辑推理题,这些逻辑推理题能够提高大家的逻辑思考能力,同时也能给大家的学习带来一定的趣味性。希望大家看到题之后,不要着急看答案,要先独立思考解决。答案的获取可以关注我的公众号:[AlbertYang]...
  • 定义详解

    万次阅读 多人点赞 2017-08-29 15:32:09
    而在更高层级进行开发时,我们会将更多的重心放在业务逻辑上,似乎对宏的使用和依赖并不多。但是使用宏定义的好处是不言自明的,在节省工作量的同时,代码可读性大大增加。如果想成为一个能写出漂亮优雅代码的开发者...
  • 错误码如何设计才合理?

    千次阅读 多人点赞 2020-06-30 14:34:34
    本文分享阿里文娱技术专家长统对于错误码的看法,希望从错误码使用的不同场景讨论得到一个合理的错误码规约,得到一个面向日志错误码标准和一个面向外部传递的错误码标准。一 前言在工作中,接触过不少外部接口,...
  • 与或非运算(与或非逻辑运算口诀)

    万次阅读 2021-07-26 04:45:46
    与&& 或|| 非! 请举例子说明C语言中的与、或、非是C语言的逻辑...或非与非或与非都说或:+与:*非:取反三个事件a,b,c或非就是先a+b,再取反与非就是先a*b,再取反& 按位与 | 按位或 ~ 按位非 ^...
  • 数电基础:时序逻辑电路

    万次阅读 多人点赞 2019-08-19 08:52:21
    虽然每个数字电路系统可能包含有组合电路,但是在实际应用中绝大多数的系统还包括存储元件,我们将这样的系统描述为时序电路。... 时序逻辑电路是数字逻辑电路的重要组成部分,时序逻辑电路又称时序电路,主...
  • oracle逻辑存储结构

    千次阅读 2019-06-14 15:12:56
    一、定义二、数据块二、区(extent)2.1 区的分配2.2 区的释放三 段3.1段的分类3.2 段相关的视图四、表空间4.1 表空间...oracle的逻辑结构包括表空间(tablespace),段(segment),扩展区(extent),数据块(data block)...
  • 结构体变量和结构体类型的定义

    万次阅读 多人点赞 2019-08-02 16:43:19
    结构体类型定义 定义方式1: Typedef struct LNode { int data; // 数据域 struct LNode *next; // 指针域 } *LinkList; 定义方式2: struct LNode { int data; // 数据域 struct LNode *next; // 指针域 }; ...
  • 彻底搞懂逻辑斯蒂回归

    万次阅读 多人点赞 2018-01-01 11:29:15
    在线性感知器算法中,我们使用了一个f(x)=x函数,作为激励函数,而在逻辑斯蒂回归中,我们将会采用sigmoid函数作为激励函数,所以它被称为sigmoid回归也叫对数几率回归(logistic regression),需要注意的是,虽然...
  • 程序员的底层思维:逻辑思维

    千次阅读 多人点赞 2021-07-31 11:47:36
    但能够清晰的说出逻辑定义(什么是逻辑)应该不多,能够正确的掌握逻辑推理的人就应该更少了。对于大部分人来说,逻辑更像是一个“熟悉的陌生人”。 举个例子。 小王说:“Frank真不是男人,竟然会怕老鼠。” 小张...
  • 根据维基百科给出的定义,所谓AI,就是根据环境感知,做出合理的行动,并获取最大收益的计算机程序。 这个定义笼统的描述了AI的含义,可是却太过于空泛,不懂的人看了依旧不懂。那么下面呢,我就从多个维度给出在...
  • 软件错误与软件缺陷

    千次阅读 2017-05-06 23:25:43
    软件错误:编写代码时有可能出现错误,这种错误叫做bug。错误在整个软件开发周期很可能扩散,需求阶段发生的错误在设计期有可能被放大,在编写代码时还会进一步扩大。 软件缺陷:缺陷是错误的结果(缺陷是错误的...
  • 业务逻辑漏洞

    千次阅读 2018-11-23 04:31:51
    业务逻辑漏洞只出现于业务流程中(模块功能),也就是说网站的部分都有可能存在逻辑错误漏洞。 业务逻辑漏洞常见分类:   业务逻辑漏洞中用户体系包含如下问题:  (1)密码重置问题  (...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 667,627
精华内容 267,050
关键字:

下定义的逻辑错误