# 异常
对于框架内部出现的大部分异常类(存在些许例外),他们的提示信息均已经被国际化,而这些异常类在国际化之后也存在了一些额外的规则。
## 父级异常
在框架内部,存在两个父级异常类:`RobotRuntimeException` 和 `RobotException`
它们的区别就是一个是Runtime的,一个不是。
>[info] 这两个异常类对于国际化语言的特殊规则是一致的,所以统一说明。
## 异常对应Tag
对于这两个异常类及其子类,Tag标签分为三部分:`一级Tag.二级Tag.后续三级Tag`
例如:
```properties
exception.run.moreDepends=Scan to multiple [{0}] implementation classes.
```
可以看到,上述的`exception`就是一级Tag,而`run`就是二级Tag,后续其他的就是三级Tag。
## 默认情况下:
- 一级Tag必然是`exception`
- 二级Tag会根据当前异常类进行格式化,如果:
- 异常类命名符合:`XxxxXxxException` 的格式,并首字符小写并移除尾部的`Exception`。
例如:`RunException` -> `run`
- 异常类命名符合:`XXXxxxXxxxException`的格式,即开头连续的大写字符,则仅移除尾部的`Exception`
例如:`CQParamException` -> `CQParam`
- 其余情况不做处理。例如:`MyError` -> `MyError`
- 三级Tag则是你在`new 异常类`的时候所使用的字符串参数。
例如有这么一个`MyErrException`异常类继承了`RobotRuntimeException`,并定义了如下一个语言信息:
```properties
exception.myErr.hello=我出错了!
```
那么当你抛出这个异常或者获取他的`message`信息的时候(此处以抛出异常举例),只需要这么写:
```java
throw new MyErrException("hello");
```
输出信息:
```
Exception in thread "main" com.forte.MyErrException: 我出错了!
at xxxx...
```
>[success] 也就是说,在new一个这样的异常类的时候,字符串参数只需要填上三级Tag即可。
>[success] 当然,支持format参数。
## **我不想这样?**
如果想要自定义二级Tag,你可以重写`getExceptionTag()`方法。
如果想要自定义一级+二级Tag,你可以重写`getMessageTag()`方法。
如果你想直接禁用使用Tag初始化来异常类,你可以重写`initTag(Object...)`方法,使此方法无效化。
- 前言
- 简单介绍
- 我该如何阅读文档
- 视频教程
- 安装与使用
- 开源协议
- 免责&捐助
- 注意事项
- 版本命名规则简介
- 主要功能版本历史
- 功能指引
- 通用API与功能
- 国际化语言
- 异常
- 消息监听
- @Listen
- @OnListen模板
- @Filter
- 消息参数截取
- @Spare
- @Constr
- @Ignore
- @ListenBreak
- @ListenBreakPlugin
- @ListenBody
- 监听响应
- 成功判定与返回值
- 监听上下文
- 动态参数
- 监听消息API
- 异步监听 @Async
- 限流监听 @Limit
- 自定义Http送信器
- 枚举与类型
- 送信器
- SENDER
- SETTER
- GETTER
- 返回值
- 其他位置
- 日志与日志拦截
- 异常处理
- 依赖注入
- 自定义依赖获取
- 批量依赖载入
- 注意事项
- 常量
- 定时任务
- 自定义过滤
- 拦截器
- 拦截器总定义
- 上下文对象总定义
- 监听消息拦截
- 送信器拦截
- 监听函数拦截
- CAT码
- CQ码
- CQCode
- CQ码工具类
- CQ扩展工具类
- AppendList拼接链
- 高级内容
- 阻断机制
- 截断机制
- 自定义枚举类型
- 枚举工厂
- byName注解
- 自定义注解
- 配置
- 文件配置
- 注解配置
- 参数配置
- 多配置
- 多账号
- 自定义账号管理器
- 小心!
- 核心版本与组件如何升级核心
- 核心版本迭代指南
- 核心
- 更新日志
- jar包与依赖
- 监听消息类结构图
- 快速启动
- 模组与扩展
- 模组开发
- 现有模组
- 通用模组-延时任务
- 通用模组-CQ码工具
- 转义器
- CQ码操作工具类
- CQ码模板-CodeTemplate
- CQ码载体-KQCode
- CQ码构建器
- MQ码工具类
- 通用模组-redis-bot管理器
- 通用模组-Debugger
- Debugger-common模块
- Debugger-server模块
- Debugger-client模块
- 通用模组-钉钉机器人
- 组件-Mirai(JVM)
- 快速开始(1.13+)
- springboot-starter
- 注意事项
- 配置
- 额外的内容
- 快速回复
- 额外监听
- CQ码解析
- 组件-酷Q(QQ)-CQ HTTP API(基本失效)
- 快速开始(推荐)
- 快速开始(1.7.x以下,不推荐)
- 快速开始(Springboot启动器)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 额外的内容
- 自定义额外监听
- CQ送信器
- 元事件
- 监听消息类结构图
- 组件-酷Q(QQ)-JCQ(失效)
- 快速开始
- 更新日志
- 额外的内容
- JCQ日志
- 配置
- 注意事项
- 监听消息类结构图
- 组件-酷Q(QQ)-HTTP TO CQ(失效)
- 快速开始(核心1.7.x及以下)
- 启动器、启动接口与配置类
- 配置
- 文件配置
- 注意事项
- 更新日志
- 监听消息类结构图
- 组件-酷Q(QQ)-LEMOC (失效)
- 快速开始(核心1.7.x及以下)
- 配置
- 注意事项
- 更新日志
- 监听消息类结构图
- Springboot快速启动器
- 常见问题汇总
- BUG反馈
- 更新计划总览