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{

    }
    */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值