一、java学习 | 异常【6】

文章介绍了Java中的异常处理机制,包括检查性异常和运行时异常的区别,以及如何通过try-catch-finally结构进行异常捕获和资源释放。此外,还详细讲解了如何在方法中触发异常,使用throw和throws关键字的区别,以及如何自定义异常类,扩展Exception类来满足特定需求。
摘要由CSDN通过智能技术生成

学习目标:

1. 什么是异常
2. 怎么去触发异常并完成善后
3. 怎么在方法中触发异常
4. 怎么自定义异常
java异常类等级图

学习内容:

1.什么是异常
◆检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。
例如要打开-个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
◆运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在
编译时被忽略。
错误ERROR:错误不是异常, 而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,
当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

java已经定义好了异常类 throwable 方便使用

Error
Error往往代表致命性的错误,带来灾难和损失
Exception
Exception代表一些程序的逻辑错误,我们要从写代码的时候就要避免这些
关键字
try catch finally throw throws

finally 用于关闭资源, IO 做善后工作
throw 和 throws 不一样!!!
throw 在方法里抛出异常, 会终止当前方法
throws 在方法上抛出异常(不需要new对象), 不一定会终止当前方法, 可以保证整体程序继续运行

自定异常只需要继承Exception即可

2.怎么去触发异常

package com.exception;

public class demo01 {
    public static void main(String[] args) {

        int a = 1;
        int b = 0;
        
        //可以不要finally,但是在IO流资源关闭中经常用到

        try{ //try 监控区域
            if(b==0){
                throw new ArithmeticException(); //主动抛出异常
            }

//            new demo01().a();
            System.out.println(a/b);
        // 被动抛出异常<捕获异常>
        }catch(Error t){ //catch捕获想要的异常类型, 要从小到大的捕获// Throwable <error, exception>
            System.out.println("程序出现error");

        }catch(Exception f){
            System.out.println("程序出现Exception");
        }
        catch(Throwable e){
            System.out.println("程序出现Throwable");
        }
        finally{ // finally最后处理善后工作
            System.out.println("finally");
        }

    }

    public void a(){
        b();
    }
    public void b(){
        a();
    }

}

  1. 怎么在方法中触发异常
package com.exception;

public class demo02 {
    public static void main(String[] args) {
        try {
            new demo02().test(1,0);
        } catch (Exception e) {
            System.out.println("demo02 may throw a exception");
//            e.printStackTrace(); // 打印错误信息
        }
    }

    //假设这个方法中处理不了a和b。就用throws抛出这个异常
    public void test(int a, int b) throws ArithmeticException{ // 方法上抛出异常
        if(b==0){
            System.out.println("throw a exception");
//            System.exit(0);
            throw new ArithmeticException(); //主动抛出异常。一般在方法中使用

        }
        System.out.println(a/b);
    }
}


  1. 怎么自定义异常
package com.exception;

public class MyException extends Exception {
    
    private int detail=0; //定义一个私有int变量

    public MyException(int a){ // 有参构造方法

        this.detail = a; //利用传入参数构造
    }

    @Override
    public String toString(){//异常的打印信息,调用e的时候会自动调用这个方法toString()
        return "MyException{" + this.detail +"}" ;
    }

}


ppackage com.exception;

//自定义异常

public class demo03 {
    public static void main(String[] args) {
        try{
            test(10);
        }catch(MyException e){
            System.out.println("MyException==>" + e); //方法先throws MyException==> + 方法内throw MyException{}
        }

    }

    static void test(int a) throws MyException{
        if(a>10){
            throw new MyException(a);
        }
        System.out.println("OK");
    }

    

}

//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值