当前位置: 首页 > news >正文

super(msg)层层上抛

super(msg) 就是“把构造参数 msg 原封不动地交给父类的构造器”。
在继承体系里,子类构造器 必须 先帮父类完成初始化;super(...) 就是干这件事的桥梁。

下面用“登录失败”这个场景,把它拆成 4 层,让你一眼看到 super(msg) 到底把 msg 送到哪、最后怎么用。


  1. 最底层:JDK 自带的 RuntimeException

package java.lang;public class RuntimeException extends Exception {// 留意这个字段private String detailMessage;public RuntimeException(String message) {// 再交给 Exceptionsuper(message);}public String getMessage() {return detailMessage;}
}
  • 真正把 message 保存到字段 detailMessage 的是 Exception 的构造器;
  • 之后任何地方都可以 e.getMessage() 取出来。

  1. 你们项目封装的 BaseException

package com.sky.exception;public class BaseException extends RuntimeException {// 可以扩展错误码、国际化 key 等字段public BaseException(String msg) {// 关键点:把 msg 继续往上传给 RuntimeExceptionsuper(msg);}
}
  • 这里如果省略 super(msg),编译器会 隐式调用父类的无参构造器 super()
    RuntimeException 没有无参构造就报错,所以必须显式写 super(msg)
  • 以后想加错误码,只要在 BaseException 再写一个字段即可,不影响子类。

  1. 业务异常 LoginFailedException(你现在看到的类)

public class LoginFailedException extends BaseException {public LoginFailedException(String msg){super(msg);   // 把 msg 再交给 BaseException}
}
  • 这一层就是 纯转发,没有额外逻辑,但起到了“语义化”作用:
    让代码里看到 LoginFailedException 就知道这是“登录失败”而不是别的业务错误。

  1. 最终使用:全局异常处理器

@ExceptionHandler(LoginFailedException.class)
public Result<Void> handle(LoginFailedException e){log.warn("登录失败:{}", e.getMessage());   // 这里取出的就是原来 super(msg) 传进来的字符串return Result.error(e.getMessage());
}

一句话总结

super(msg) 就是“把当前这一层收到的 msg 继续往上抛”,
最终落到 JDK 的 Exception.detailMessage 字段里,
使得任何 catch 到它的地方都能用 e.getMessage() 拿到“用户名或密码错误”这类业务提示。

http://www.dtcms.com/a/352739.html

相关文章:

  • 数据结构青铜到王者第七话---队列(Queue)
  • 基于Spring Boot的考研辅导知识共享平台-项目分享
  • Node.js 多版本管理工具 nvm 的安装与使用教程(含镜像加速与常见坑)
  • 计算机组成原理实验报告
  • Kafka架构以及组件讲解
  • 【Kafka】重点概念和架构总结
  • Unity 串口通信
  • 解开 Ansible 任务复用谜题:过滤器用法、Include/Import 本质差异与任务文件价值详解
  • Writer-你的私人内容创作助手
  • TCP并发服务器构建
  • TensorFlow 深度学习 | Layer 基础知识介绍
  • 浅谈Elasticsearch数据写入流程的refresh和flush操作
  • 智能一卡通系统通过集成身份识别、权限管理、数据联动等技术,实现多场景一体化管理。以下是多奥基于最新技术趋势和应用案例的系统解析
  • screen命令
  • AI一周事件(2025年8月20日-8月26日)
  • 74hc4094芯片点亮LED闪烁问题的解决
  • JS(面试)
  • 深度学习——激活函数
  • 碳化硅衬底 TTV 厚度不均匀性测量的特殊采样策略
  • Redis哨兵机制:高可用架构的守护神!⚔️ 主从秒级切换实战指南
  • 力扣LCP 46. 志愿者调配随笔
  • 基于Spring Boot+Vue的生活用品购物平台/在线购物系统/生活用户在线销售系统/基于javaweb的在线商城系统
  • 微生产力革命:AI解决生活小任务分享会
  • AI 解决生活小事 2——用 AI 做一回新闻播客
  • 解决mac brew4.0安装速度慢的问题
  • 卫星轨道动力学基本理论
  • 精品短剧《奔腾的心》正式开机,以匠心描绘新时代西藏故事
  • 深入解析达梦数据库:模式分类、状态管理与实操指南
  • 21款m1 max升级到macOS 13——Ventura
  • ModuleNotFoundError: No module named ‘dbgpt_app‘