JAVA 中级 / 异常处理 / - JAVA 自定义异常

本文介绍了Java中自定义异常的重要性和方法,包括创建一个基础异常类BaseException作为所有自定义异常的父类,从它派生出特定业务异常如UserNotFoundException和LoginFailedException。同时,提供了自定义异常的构造方法示例,并给出一个年龄验证的编程练习,展示了如何在遇到异常时抛出自定义异常并捕获处理。
摘要由CSDN通过智能技术生成

目录

0.应用场景

1.根异常

2.other异常从根异常派生 

3.自定义异常练习

4.JAVA 异常综合练习题



0.应用场景

Java自定义异常与异常使用最佳实践
       服务器的基本作用是处理与客户机的通信,若使用标准Java API(如java.io和java.net包中的类)来编写服务器,则可使编写的代码在多个位置抛出IOException。在设置服务器、等待客户机连接和获取通讯流时,可抛出IOException,在通信期间及试图断开连接时,也会抛出IOException。简而言之,服务器的各个部分都是引发IOException。
       对于服务器而言,这样IOException意义不尽相同。虽然由同一异常类型表示,但与各个异常先关的业务含义存在差异,报告和恢复操作也不相同。所以,可以将一个异常集与服务器配置和启动问题关联,将另一个异常集与客户机通讯的实际行动关联,将第三个异常集与服务器关闭任务关联。使用自定义异常,可采用对应用程序有意义的方式来灵活地表示错误。
        为此,我们需要使用自定义异常来定为问题,定位问题与异常实际准确的位置。


廖雪峰-自定义异常

1.根异常

        在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。

        一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。

  BaseException需要从一个适合的Exception派生,通常建议从RuntimeException派生

public class BaseException extends RuntimeException {
}

2.other异常从根异常派生 

        其他业务类型的异常就可以从BaseException派生:

public class UserNotFoundException extends BaseException {
}

public class LoginFailedException extends BaseException {
}

...

        自定义的BaseException应该提供多个构造方法:

public class BaseException extends RuntimeException {
    public BaseException() {
        super();
    }

    public BaseException(String message, Throwable cause) {
        super(message, cause);
    }

    public BaseException(String message) {
        super(message);
    }

    public BaseException(Throwable cause) {
        super(cause);
    }
}

        上述构造方法实际上都是原样照抄RuntimeException这样,抛出异常的时候,就可以选择合适的构造方法。通过IDE可以根据父类快速生成子类的构造方法。

3.自定义异常练习

Java自定义异常

        如果 Java 提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计 Java 类库或框架,其中包括异常类型。实现自定义异常类需要继承 Exception 类或其子类,如果自定义运行时异常类需继承 RuntimeException 类或其子类。

        自定义异常的语法形式为:

<class><自定义异常名><extends><Exception>

        在编码规范上,一般将自定义异常类的类名命名为 XXXException,其中 XXX 用来代表该异常的作用。

        自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。

        例如,以下代码创建一个名称为 IntegerRangeException 的自定义异常类:

class IntegerRangeException extends Exception {
    public IntegerRangeException() {
        super();
    }
    public IntegerRangeException(String s) {
        super(s);
    }
}

        以上代码创建的自定义异常类 IntegerRangeException 类继承自 Exception 类,在该类中包含两个构造方法。

例 1编写一个程序,对会员注册时的年龄进行验证,即检测是否在 0~100 岁。

1)这里创建了一个异常类 MyException,并提供两个构造方法。MyException 类的实现代码如下:

public class MyException extends Exception {
    public MyException() {
        super();
    }
    public MyException(String str) {
        super(str);
    }
}

2)接着创建测试类,调用自定义异常类。代码实现如下:

import java.util.InputMismatchException;
import java.util.Scanner;
public class Test07 {
    public static void main(String[] args) {
        int age;
        Scanner input = new Scanner(System.in);
        System.out.println("请输入您的年龄:");
        try {
            age = input.nextInt();    // 获取年龄
            if(age < 0) {
                throw new MyException("您输入的年龄为负数!输入有误!");
            } else if(age > 100) {
                throw new MyException("您输入的年龄大于100!输入有误!");
            } else {
                System.out.println("您的年龄为:"+age);
            }
        } catch(InputMismatchException e1) {
            System.out.println("输入的年龄不是数字!");
        } catch(MyException e2) {
            System.out.println(e2.getMessage());
        }
    }
}

4.JAVA 异常综合练习题

JAVA 异常综合练习题【要VIP】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值