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

自定义异常

自定义异常类:当Java提供的异常类,不够使用时,需要自己定义一些异常类。

格式:public class XXXException extends Exception 或者 RuntimeException{

添加一个空参数的构造方法

添加一个带异常信息的构造方法

}

注意事项:

1.自定义异常类一般都是以Exception结尾,说明该类是一个异常类

2.自定义异常类,必须继承 Exception (编译异常)或者 RuntimeException(运行异常)--异常指程序执行期非正常执行导致程序终止

继承 Exception (编译异常):那么自定义的异常类就是一个编译器异常,如果方法内部抛出了编译器异常,就必须处理这个异常,要么throws,要么try-catch

继承RuntimeException(运行异常:那么自定义的异常类就是一个运行期异常,无需处理,交给JVM处理。

举例:

模拟注册操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册!

public class Demo10RegisterException extends Exception{
    // 空参构造方法
    public Demo10RegisterException() {
    }
    //带异常信息的构造方法
    /*
    查看源码发现,所有的异常类都会有一个带异常信息的构造方法,
    方法内部会调用父类带异常信息的构造方法,让父类来处理这个异常信息
     */
    public Demo10RegisterException(String message){
        super(message);
    }
}
public class Demo10Register {
    static String[] username = {"张三","李四","王五"}; // 成员变量
    public static void main(String[] args) throws Demo10RegisterException {
        System.out.println("请注册您的用户名:");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        check(name);
    }

    private static void check(String name) throws Demo10RegisterException {
        for (int i = 0; i < username.length; i++) {
            if (username[i].equals(name)) {
                /*System.out.println("亲,该用户名已经被注册!");
                break;*/
                throw new Demo10RegisterException("亲,该用户名已经被注册!");
            }
        }
        System.out.println("恭喜您,注册成功!");
    }
}

 

相关文章:

  • 进程与线程
  • 线程类以及创建多线程的第一种方式---继承Thread类
  • Thread类的构造方法及常用方法
  • 创建多线程的第二种方式--实现Runable接口
  • Thread和Runnable的区别和匿名内部类方式实现线程的创建
  • 线程安全
  • 数据结构基本概念和术语
  • 线程状态
  • Object类中wait带参方法和notifyAll方法
  • File类
  • 递归(斐波那契数列、类加、累乘、打印多级目录)
  • FileFilter过滤器
  • LeetCode两数之和
  • 稀疏数组
  • 队列
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 78. Subsets
  • Js基础知识(一) - 变量
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PV统计优化设计
  • Python连接Oracle
  • Spring Cloud中负载均衡器概览
  • Vue.js-Day01
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 创建一种深思熟虑的文化
  • 分布式事物理论与实践
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 正则表达式
  • ionic异常记录
  • ​【已解决】npm install​卡主不动的情况
  • ​Python 3 新特性:类型注解
  • ​ssh免密码登录设置及问题总结
  • ​马来语翻译中文去哪比较好?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (007)XHTML文档之标题——h1~h6
  • (8)STL算法之替换
  • (javascript)再说document.body.scrollTop的使用问题
  • (八)Flask之app.route装饰器函数的参数
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (六)软件测试分工
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • .CSS-hover 的解释
  • .gitignore文件---让git自动忽略指定文件
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .Net Redis的秒杀Dome和异步执行
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .Net组件程序设计之线程、并发管理(一)
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码