Java SE入门及基础(40)

目录

自定义异常

1. 为什么要使用自定义异常

自定义运行时异常语法

自定义检查异常语法

示例

2. 异常使用注意事项

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客


自定义异常

1. 为什么要使用自定义异常

        在Java 中,异常的类型非常的多,要想使用这些异常,首先必须要熟悉它们。这无疑是一个巨大的工作量,很耗费时间。如果我们可以自定异常,则只需要熟悉 RuntimeException Exception 和Throwable 即可。这大大缩小了熟悉范围。自定义异常还可以帮助我们快速的定位问题。
自定义运行时异常语法
public class 类名 extends RuntimeException {}
自定义检查异常语法
public class 类名 extends Exception {}
示例
        在登录时经常会看到提示:" 用户名不存在 " 或者 " 账号或密码错误 " 。请使用自定义异常来描述该场景
package com . we . exception ;
/**
* 用户名不存在异常
*
* 异常命名规范:场景描述 +Exception
*/
public class UsernameNotFoundException extends Exception {
        public UsernameNotFoundException (){}
        public UsernameNotFoundException ( String msg ){
                super ( msg );
        }
}
package com . we . exception ;
/**
* 账号或密码错误异常
*/
public class BadCredentialsException extends Exception {
        public BadCredentialsException (){
        }
        public BadCredentialsException ( String msg ){
                super ( msg );
        }
}
package com . we . exception ;
import java . util . Scanner ;
public class Login {
        private static Scanner sc = new Scanner ( System . in );
        public static void main ( String [] args ) {
                System . out . println ( " 请输入账号: " );
                String username = sc . next ();
                System . out . println ( " 请输入密码: " );
                String password = sc . next ();
                try {
                        login ( username , password );
                } catch ( UsernameNotFoundException e ) {
                        e . printStackTrace ();
                } catch ( BadCredentialsException e ) {
                        e . printStackTrace ();
        }
}
        public static void login ( String username , String password ) throws UsernameNotFoundException , BadCredentialsException {
                if ( "admin" . equals ( username )){
                        if ( "123456" . equals ( password )){
                                System . out . println ( " 登录成功 " );
                        } else {
                                throw new BadCredentialsException ( " 账号或密码错误 " );
                        }
                } else {
                        throw new UsernameNotFoundException ( " 账号不存在 " );
                }
        }
}

2. 异常使用注意事项

  1. 运行时异常可以不处理。
  2. 如果父类抛出了多个异常,子类覆盖父类方法时,只能抛出相同的异常或者是该异常的子集。(与协变返回类型原理一致)
  3. 父类方法没有抛出异常,子类覆盖父类该方法时也不可抛出检查异常。此时子类产生该异常,只能捕获处理,不能声明抛出
package com . we . exception ;
public class Father {
        public void eat () throws Exception {
        }
        public void sleep (){
        }
        public void login (){
        }
}
package com . we . exception ;
public class Child extends Father {
        private String username ;
        private String password ;
        public Child ( String username , String password ) {
                this . username = username ;
                this . password = password ;
        }
        @Override
        public void eat () throws UsernameNotFoundException {
        }
        //父类中的方法没有声明抛出异常,子类中方法可以声明抛出运行时异常
        @Override
        public void sleep () throws RuntimeException {
        }
        //父类中的方法没有声明抛出异常,子类中方法不能声明抛出检查异常
        @Override
        public void login () {
                try {
                        Login . login ( username , password );
                } catch ( UsernameNotFoundException e ) {
                        e . printStackTrace ();
                } catch ( BadCredentialsException e ) {
                        e . printStackTrace ();
                }
        }
}

Java SE文章参考:Java SE入门及基础知识合集-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 零基础入门教程

目录 1. div 和 span2. 什么是CSS?3. CSS 引入方式3.1 内部样式表3.2 外部样式表3.3 行内样式 4. 选择器4.1 标签选择器4.2 类选择器4.3 id 选择器4.4 通配符选择器 5. CSS 基础属性6. 谷歌浏览器调试工具 正文开始。 1. div 和 span 在学习 CSS 之前,…

什么是网站?为什么要搭建网站?

网站:简单来说,网站就是通过互联网来展示信息的页面集合。它可以在电脑或者手机上打开,提供各种功能,比如查看新闻、购买商品、搜索信息等。 一、建网站的目的:展示个人或企业的存在 网站建设的首要目的之一是展示个人…

【C++】三大特性之多态

1 定义及实现 1.1 概念 多态是C三大特性之一。通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如学…

简化您的网络连接 —— socks5代理,怎么轻松设置

您需要 SOCKS5 代理吗?在本文中,我们将向您展示逐步的 SOCKS5 代理设置。了解如何获取 SOCKS5 和其他代理协议 —— HTTP 和 HTTPS 代理。 正在寻找 SOCKS5 代理?幸运的是,Smartdaili 现在支持 SOCKS5 协议以及住宅、移动和专用数…

Java后端面试:框架篇高频面试(Spring、SpringMVC、SpringBoot、MyBatis)

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Java后端面试:MySQL面试篇(底层事务、SQL调优) 📚订阅专栏:Java后端面…

十四、ReadWriteLock

ReadWriteLock 读写锁 又叫排他锁 如果使用互斥锁,一个线程在读,其他线程也不能读也不能写 换成读写锁的时候,读线程是读锁,写线程是写锁,写锁是排他的 在多线程大大提高效率,当一个线程在读的时候&…

高可用篇_A Docker容器化技术_IV Dockerfile的基本概念和应用

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载 DockerFile 解析 一个镜像文件到底是如何创建? dockerfile 描述出镜像文件需要的一些依赖配置和环境变量 执行命令将我们docker…

glib交叉编译

Glib交叉编译 逸一时,误一世。 —— 田所浩二「夏夜银梦」 交叉编译 GLib 涉及到在一个平台上生成能够在另一个平台上运行的目标文件。在这种情况下,我们将会在一台主机(通常是开发机器)上使用交叉编译工具链来构建 GLib 库&#…

从历年315曝光案例,看APP隐私合规安全

更多网络安全干货内容:点此获取 ——————— 随着移动互联网新兴技术的发展与普及,移动APP的应用渗透到人们的衣食住行方方面面,衍生出各类消费场景的同时,也带来了无数的个人隐私数据泄露、网络诈骗事件。 历年来&#xff…

grpc python实现异步调用(不用grpc异步接口)

grpc python实现异步调用[不用grpc异步接口] 1.infer_session.proto2.生成Python库函数3.infer_session_server.py4.infer_session_client.py5.common.py6.运行7.输出 grpc同步调用更简单,但是在处理复杂任务时,会导致请求阻塞,影响吞吐。当然,可以采用grpc异步接口解决,本方采…

机器人在果园内行巡检仿真

文章目录 创建工作空间仿真果园场景搭建小车模型搭建将机器人放在仿真世界中创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws仿真果园场景搭建 cd ~/catkin_ws/src git clone https://gitcode.com/clearpathrobotics/cpr_gazebo.git小车模型搭建 DiffBot是一种具有两个…

【English Learning】Day16

2024/03/18 和小录打卡的第16天 目录 Words & phrases Words & phrases weakness a sign of weakness 懦弱的表现strengthens and weaknesses 优点和缺点a weakness for 对---迷恋qualify qualify for the Olympics 取得参加奥运会资格gloomy a gloomy room 昏暗的房间…

Java 快速幂

在Java中,实现快速幂算法可以极大地提高计算大整数幂次的效率。快速幂算法的基本思想是,将幂次转化为二进制形式,然后利用二进制位的特性,通过不断平方和乘法操作来得到结果。 以下是一个Java实现的快速幂算法: java…

Vmware虚拟机配置虚拟网卡

背景 今天同事咨询了我一个关于虚拟机的问题,关于内网用Vmware安装的虚拟机,无法通过本机访问虚拟上的Jenkins的服务。   验证多次后发现有如下几方面问题。 Jenkins程序包和JDK版本不兼容(JDK1.8对应Jenkins不要超过2.3.57)虚…

信号量——生产消费者模型

前文 在这一篇博客(信号量博客)中我曾经提及过信号量的知识,而当对信号量进行提炼总结时,大致是以下三点: 1. 信号量本质是一个计数器(代表资源的数量) 2. 申请信号量本质就是对资源的一种预定机…

final关键字

final关键字 基本介绍final使用细节 基本介绍 final 中文意思:最后的,最终的。 final 可以修饰类、属性、方法和局部变量。 在某些情况下会使用到final: 1) 当不希望类被继承时,可以用 final 修饰; // 如…

Python--成员方法、@staticmethod将成员方法静态化、self参数释义

在 Python 中,成员方法是指定义在类中的函数,用于操作类的实例对象。成员方法通过第一个参数通常命名为 self,用来表示调用该方法的实例对象本身。通过成员方法,可以实现类的行为和功能。 成员方法的定义 在类中定义成员…

深入理解数据结构树

文章目录 一、树是什么二、树的相关概念三、树常见类型四、树的应用应用场景五、树的代码实现 一、树是什么 数据结构树是一种非线性的数据结构,它由节点和边组成。树的节点之间通过边连接,形成层次结构。树的顶部节点称为根节点,每个节点可以…

【Linux】Linux上代码的编译与调试

目录 Linux上常用的编译器gcc\g 如何使用gcc/g 编译过程: 如何使用gcc编译? 进行预处理 进行编译 进行汇编 进行链接 函数库 函数库的分类 gcc选项 Linux调试器-gdb的使用 gdb的常用参数 Linux项目自动化构建工具make/Makefile 原理 利用…

MYSQL日志 redo_log更新流程 bin_log以及bin_log数据恢复

Redo_log写入策略 Redo log的Innodb_flush_log_at_trx_commit:: 这个参数有三个取值 取值为0:每次事务提交时,只是把redo_log留在 redo log buffer中,宕机会丢失数据; 取值为1(默认值):每次事…