news 2026/9/11 22:06:54

Java自定义异常类 方法重写异常规则

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java自定义异常类 方法重写异常规则

一、自定义异常类

Java 允许开发者根据业务需求,自定义专属异常类,用于处理项目中的业务异常(如密码非法、账号不存在、权限不足等场景)。

1.1 自定义异常分类规则

自定义异常的类型,由父类继承关系决定:

  • 自定义运行时异常:自定义类继承RuntimeException或其子类 特点:编译器不强制检测,代码可处理、可不处理
  • 自定义编译时(受检)异常:自定义类继承Exception(与 RuntimeException 无继承关系) 特点:编译器强制检测,代码中必须处理,否则编译报错

1.2 自定义异常类规范

自定义异常类,一般需要提供两个构造方法

  1. 无参数的构造方法
  2. 有参数的构造方法,参数类型为 String,接收异常信息,利用super(message)调用父类构造,为异常信息属性赋值

1.3 完整代码示例:密码校验自定义异常案例

package Test_02; import java.util.ArrayList; import java.util.Scanner; public class TestMyException { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入您的密码:"); String pasword = sc.next(); checkPassword(pasword); } //监测密码 public static void checkPassword(String psw) { try { if(psw.length()!=6) { //抛出异常,并且带有“此密码必须为6位”异常信息->抛出关于密码监测异常 throw new CheckedPasswordException("此密码必须为6位"); } System.out.println("密码输入正确...."); System.out.println("请继续一下的操作"); }catch(CheckedPasswordException c) { // String message = c.getMessage();//为用户做提示信息用的 // System.err.println(message); c.printStackTrace(); } } } //自定义编译期异常,继承Exception class CheckedPasswordException extends Exception { public CheckedPasswordException() {} public CheckedPasswordException(String message) { super(message); } }

运行测试:输入长度不等于 6 的密码,会手动抛出我们自定义的CheckedPasswordException异常,进入 catch 块打印异常栈信息。


二、方法重写(Override)异常约束规则

2.1 方法重写基础规则

  1. 子类的方法名,形参列表,返回值类型和父类相同(协变返回除外)
  2. 子类的访问修饰符权限大于等于父类权限(权限只能放宽,不能缩小)

2.2 重写异常核心规则(⭐面试重点)

一句话口诀:可少、可子、不可多、不可父

  • ✅ 可以不抛出任何异常
  • ✅ 可以抛出父类抛出异常的子类异常
  • ❌ 不可以抛出比父类范围更大的异常(父类异常的父类)
  • ❌ 不可以抛出父类没有的新编译时异常

细分说明:

  1. 如果父类方法没有抛出任何异常:子类重写方法也不能抛出编译时异常(运行时异常不受此限制,可以抛出)
  2. 如果父类方法抛出某个异常:子类重写方法只能抛出该异常、该异常的子类,或者不抛异常。

2.3 简单示例辅助理解

class Father{ public void test() throws IOException{ //父类抛出IOException } } class Son extends Father{ // ✅合法:抛出IOException子类FileNotFoundException @Override public void test() throws FileNotFoundException{ } // ✅合法:不抛出任何异常 /* @Override public void test(){ } */ // ❌非法:抛出IOException父类Exception,违反规则 /* @Override public void test() throws Exception{ } */ }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 22:06:35

OpenHarmony驱动开发三条路径:HDF、内核原生与用户态外设接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 22:05:41

2025年炒菜机器人行业观察:从智能厨电到后厨自动化的技术真相

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 22:04:09

YOLOv10 OpenVINO C++部署实战:模型转换与后处理详解

简介:面向需要高效部署目标检测模型的C开发者,这份源码基于OpenVINO实现YOLOv10实时推理,支持ONNX与OpenVINO IR两种模型格式,兼容FP32、FP16、INT8精度及动态形状输入,已在Ubuntu 18.04/20.04/22.04上完成验证。压缩包…

作者头像 李华
网站建设 2026/9/11 22:02:12

灵巧手驱控方案解析:TMC6460全集成芯片实现200KHz PWM与2%电流精度

最近在调一个灵巧手项目,多自由度关节对驱控方案的要求确实苛刻——空间极小、发热敏感、电流精度要求高,还得能快速组网调试。市面上通用伺服驱动器体积大、走线复杂,根本塞不进手指关节里。这个项目我最终采用了全集成驱控方案,…

作者头像 李华
网站建设 2026/9/11 22:01:46

Linux内核Slab分配器:原理、SLUB实现与内存问题排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 21:58:45

渗透测试实战:从DC2靶机完整拆解攻击链路与学习路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华