错误 1枚举字段加了staticjavaprivate static int code; // ❌为什么错static属于类所有枚举实例共享一份。SUCCESS赋值为 200OUT_OF_STOCK赋值为 201 时会把 200 覆盖掉最后所有枚举的 code 都变成最后一个值。应该怎么写private final int code;去掉 static每个实例独有一份。错误 2枚举的 getter 加了staticjavapublic static String getMessage() { return msg; } // ❌为什么错msg是实例字段非 static静态方法无法访问非静态字段。应该怎么写public String getMessage() { return msg; }去掉 static。错误 3静态方法里用类名调实例方法javaresult.msg ResultCode.getMessage(); // ❌为什么错ResultCode是类名getMessage()是实例方法必须通过具体对象如SUCCESS或参数resultCode调用。应该怎么写result.msg resultCode.getMessage();用参数名或ResultCode.SUCCESS.getMessage()用实例。BusinessException 的作用不是为了抛异常而是为了把业务错误信息ResultCode完整地携带出去交给全局异常处理器统一转换成 Result 返回给前端。不是“调用父类的对象”而是“调用父类的构造方法”当你在子类里写super(...)时不是去拿一个已经存在的父类对象来用。而是委托父类的构造方法去初始化“当前这个子类对象”内部属于父类的那部分内存。BusinessException extends RuntimeException这意味着BusinessException是RuntimeException的子类。所以它自动拥有了父类的所有非私有方法比如getMessage()、printStackTrace()并且可以在构造时通过super(...)来初始化父类的字段。super(resultCode.getMessage());这一行干了两件嵌套的事先执行resultCode.getMessage()从你传入的枚举比如OUT_OF_STOCK里取出固定文案比如库存不足得到一个String。再执行super(...)将这个String传给父类RuntimeException的带参构造方法RuntimeException(String message)。必须导包才能使用短名否则就要写完整的全限定名包名.类名除非它们在同一个包下。跨包不同包必须import com.flashmall.constant.ResultCode;否则只能写com.flashmall.constant.ResultCode.OUT_OF_STOCK。同包同一个包import语句可以省略编译器会自动去同一个包里找。ResultCodeInteger—— 语法上就非法ResultCode是你定义的一个枚举enum不是一个泛型类Generic Class。在 Java 里只有像ListT、MapK,V这种在类名后面带了T定义的才能写成ListInteger。你的ResultCode定义是public enum ResultCode { ... }它没有T这个“插槽”所以ResultCodeInteger这种写法编译器直接不认报错“类 ResultCode 不接受类型参数”Message文案塞进父类是为了让“默认日志工具”能看到当你写了super(resultCode.getMessage())父类Throwable内部的detailMessage字段就被填上了库存不足。谁在用这个字段Java 自带的e.printStackTrace()、e.toString()以及 Spring Boot 默认的日志输出格式。效果当你没有特意写日志代码只是让异常自动冒泡时控制台会打印出BusinessException: 库存不足。文案不会丢也不会显示null。Message 是“给调试人员、运维人员看的可读描述”。2. Code数字不需要塞进父类是因为父类没地方放数字Throwable父类只设计了一个String detailMessage字段它根本没有地方存一个int数字。所以code不需要显示在“底层默认日志”里——因为它根本放不进去高内聚、低耦合。Spring 说你不要每个 Controller 都写try{ }catch(...)太麻烦了。于是Spring 提供了一个全局接球员。名字就是GlobalExceptionHandler以后。任何throw ...最终。Spring 都会自动送到GlobalExceptionHandler这里。所以以后。ControllerGlobalExceptionHandler 的职责。一句话统一捕获异常并转换成 Result 返回给前端。注意。它不是处理业务。它只是翻译。例如收到BusinessException翻译所以以后记一个原则包是按职责分不是按名字分。例如以后controller里面。是不是不会放UserService因为Service不是Controller。