Java SE入门及基础(40)

本文介绍了如何在Java中自定义异常,包括自定义运行时异常和检查异常的语法,以及在登录功能中的应用实例。同时强调了异常使用时的注意事项,如运行时异常的处理和检查异常的继承规则。
摘要由CSDN通过智能技术生成

目录

自定义异常

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博客

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值