Java异常

Exceptions

一、异常的概念

​ 在理想的世界里,用户输入数据的格式永远都是正确的,选择打开的文件也一定都存在,代码永远也不会出现Bug。然而,在显示世界中却充满了不良的数据和有问题的代码,这就是Java中的“异常”。

​ 异常的对象都派生于Throwable类的一个类实例,可分为Exception和Error两大部分,如下图所示:

在这里插入图片描述

二、异常的举例和异常的处理
2.1 异常的举例
  • 非检查型异常(UncheckedException)
public class ExceptionsDemo {
    public static void main(String[] args) {
        sayHello(null);
    }

    /**
     * 运行时异常,非检查型异常。
     */

    public static void sayHello(String name) {

        System.out.println(name.toUpperCase()+",HELLO!");
    }
}

在这里插入图片描述

  • 检查型异常(CheckedException)
 @Test
    public  void read(){
        try {
            FileReader reader=new FileReader("file.txt");
            System.out.println("File Open");
            //异常发生后,try异常后面的代码不运行。
        } catch (FileNotFoundException e){
            System.out.println(e.getMessage());
        }

    }

在这里插入图片描述

  • 错误异常(Error)
/**
     * Error展示,无限递归一个函数
     * 导致堆栈溢出
     */
    @Test
    public void loop(){
        loop();
    }

在这里插入图片描述

2.2 异常处理
  • 捕获异常(try-catch-finally)
  @Test
    public  void read(){
        Reader reader=null;
        try {
            reader=new FileReader("file.txt");
            System.out.println("File Open");
            reader.read();
        } catch (FileNotFoundException e){
            System.out.println(e.getMessage());
            /**
             * 捕获多个异常时,需要注意异常的捕获顺序,
             * 大的异常放在后面,这里是多态的体现,如果将
             * IOException放在前面,它的子类FileNotFoundException
             * 也将捕获,后面的捕获操作将失效。
             */
        }catch (IOException e) {
            System.out.println(e.getMessage());
        }finally {
            try {
                if(reader!=null){
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

当有多个异常进行捕获时,异常类存在子父类关系,父类异常放在后面捕获。异常捕获后,try后面的代码不执行,但会执行finally中的代码,这部分代码不论前面的异常发生与否,都将执行。通常用于显示关闭连接资源,比如数据库连接等。

  • 抛出异常(throw-throws)
public class Account {
    private float balance;
    /**
     *异常处理方法之抛出非法参数异常
     * @param value
     */
    public  void deposit(float value){
        if(value<0)
            throw new IllegalArgumentException();
    }
}
 @Test
    public  void show()  {
        Account account = new Account();
        account.deposit(-2);

    }

在这里插入图片描述

/**
     * 抛出IO异常,必须处理,在方法声明出throws异常
     * @param value
     * @throws IOException
     */
    public void withdraw(float value) throws IOException {
        if(value<0)
            throw new IOException();
    }
 @Test
    public  void show() throws IOException {
        Account account = new Account();
        account.withdraw(-2);
    }

在这里插入图片描述

2.3 自定义异常
  • 创建异常类
/**自定义异常类
 * @author tqwstart
 * @creat 2022-07-29 15:30
 */

public class InsufficientFundsException extends Exception{
    /**
     * 定义异常类构造方法
     */
    public InsufficientFundsException(){
        super("Insufficient funds in your account.");
    }
    public InsufficientFundsException(String message){
        super(message);
    }
}

  • 使用自定义异常类
/**
 * @author tqwstart
 * @creat 2022-07-29 15:08
 */
public class Account {
    private float balance;
    public void withdrawMoney(float value) throws InsufficientFundsException {
        if(value>balance)
            throw new InsufficientFundsException();
    }
}
  • 测试
 @Test
    public  void show()  {
        Account account = new Account();
        try {
            account.withdrawMoney(2);
        } catch ( InsufficientFundsException e) {
            System.out.println(e.getMessage());
        }
    }

在这里插入图片描述

三、小结
  • 学习了异常的概念与异常的分类;
  • 举例了非检查型异常、检查型异常和错误异常;
  • 学习了异常的处理方法,了解多重异常时的捕获;
  • 学习了自定义异常并使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值