Java的异常处理

本文详细介绍了Java中的异常处理机制,包括错误与异常的分类、异常处理的关键字如try、catch、finally等的用法,以及如何自定义异常类。同时探讨了Exception与RuntimeException的区别,并给出了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java把错误和异常都分类了
首先Java把错误分为两大类,都是java.lang.Throwable的子类

  • java.lang.Error系统级的异常,一般程序很难调试。
  • java.lang.Exception 程序级的异常,通过代码可以处理

java.lang.Exception 它是一切程序级异常的父类

  • java中把所有产生的程序级异常都进行了分类,我们程序中出现的任何异常都能在分类中找到。
  • Exception大的方向分为了两种
    • JVM能指定捕获的的异常java.lang.RuntimeException及其子类,当然也可以直接处理。
    • JVM不能捕获的异常必须通过程序自动处理,如果不处理程序编译不通过。

try catch关键字

try{
//业务代码(可能会产生异常)
}catch(异常类 异常对象){
//异常处理
}

try后面可以后有多个catch,多个catch的时候要注意:
子类一定要放在父类的前面,因为父类的引用可以引用子类的对象
java.lang.Exception是一切异常的父类,它就可以处理任何异常(可能信息不太准确)

finally关键字

不管有木有异常最终都要执行的语句(有一些资源需要关闭)

try{
//有可能产生都要异常}catch(异常类 异常对象){
//编写异常的处理语句
}catch(异常类 异常对象){
//编写异常的处理语句
}finally{
//一定会运行的程序代码
}

finally语句块的编写要求
finally作为异常的统一出口,所以在此语句块中的编写尽可能不要出现像throw或return这样的语句,这样可以避免不必要的问题出现。

throw/throws

throw是某种情况下抛出(制造出)一个异常
throws是用来回避异常的

throw和throws的综合应用

//throws
class Math
{
    public int div(int i ,int j)throws Exception{
        System.out.println("********计算开始*******");
        int temp = 0;
        try
        {
            temp=i/j;
        }
        catch (Exception e)
        {
            throw e;
        }finally{

            System.out.println("********计算计算*******");
        }
        return temp;
    }
}

class  ThrowDemo02
{
    public static void main(String[] args) 
    {
        Math m = new Math();
        try
        {
            System.out.println("除法操作"+m.div(10,0));
        }
        catch (Exception e)
        {
            System.out.println("异常处理" +e);
        }
    }
}

Exception类与RuntimeException类

  • Exception在程序中必须使用try…catch来进行处理
  • RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

需要注意的是:当子类重写父类方法的时候,不能throws比父类更多的异常。
除非throws的异常是RuntimeException 。
原理:Java中,父类可以接受任何子类对象,如果子类比父类有更多的约束,那么父类处理了就出现了问题。所以在Java中子父类进行了继承,子类不能比父类有更多的约束。面向对象的设计中有一个里氏替换原则说明的就是这个问题。

自定义异常类

定义异常类只需要继承Exception类即可

//自定义异常
class MyException extends Exception
{
    public MyException(String msg){
        super(msg);
    }
}
class  DefaultException
{
    public static void main(String[] args) 
    {
        try
        {
            throw new MyException("自定义异常");
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值