Java基础知识总结(62)

(2)异常

    Java 的异常机制主要依赖干 try、catch、finally、throw 和 throws 五个关键字。

    其中 try 关键字后紧跟一个花括号扩起来的代码块(花括号不可省略),简称 try 块,它里面放置可能引发异常的代码。

    catch后对应异常类型和一个代码块,用于表明该 catch 块用于处理这种类型的代码块。

    多个 catch 块后还可以跟一个 finally 块,finally 块用于回收在 try 块里打开的物理资源,异常机制会保证 finally 块总被执行。

    throws 关键字主要在方法签名中使用,用于声明该方法可能抛出的异常。

    throw 用于抛出—个实际的异常,throw 可以单独作为语句使用,抛出一个具体的异常对象 。

   

    继承关系:

   

    Java把所有的非正常情况分为两大类:异常(Exception)和错误(Error),他们都是Throwable的子类。

   

    Error:和虚拟机有关的问题,如系统崩溃、虚拟机错误等,这些错误无法恢复或者不可能被抓取,将导致应用程序中断,应用程序通常无法处理这些错误,因此不应该用异常处理方法来处理Error。同样,也不能在throws字句中声明该方法可能抛出Error。

    Exception:程序中出现的非正常情况,其中异常又分为两类,RuntimeException(运行时异常)和CheckedException(检查时异常),这两类异常都是Exception的子类,其中RuntimeException及其子类不需要开发者显示处理。如果一个Exception没有继承RuntimeException类,则属于CheckedException,这类异常通常需要开发者显示处理。否则会出现编译错误。

public class ExceptionDemo {

    /**

     * 定义方法,该方法抛出算术异常

     * 算术异常是运行时异常 继承自RuntimeException的类是运行时异常,不用显式处理

     * @throws ArithmeticException

     */

    public void division() throws ArithmeticException{

    }

    /**

     * 定义方法,该方法抛出检查时异常

     * 检查时异常要求开发者必须显示处理

     * @throws ClassNotFoundException

     */

    public void add() throws ClassNotFoundException{

   

    }

   

    public static void main(String[] args) {

   

        ExceptionDemo ed = new ExceptionDemo();

        //因为该方法抛出的是运行时异常,即使不处理也不会发生编译错误

        ed.division();

        //该方法抛出的是检查时异常,要求开发者显示处理

        //如果不处理则编译错误

        //add.hello();

    }

}

    异常处理机制:

    try...catch捕获异常:

public class ExceptionDemo {

    /**

     * 定义方法,该方法抛出算术异常

     * 算术异常是运行时异常 继承自RuntimeException的类是运行时异常,不用显式处理

     * @throws ArithmeticException

     */

    public void division() throws ArithmeticException{

    }

    /**

     * 定义方法,该方法抛出检查时异常

     * 检查时异常要求开发者必须显示处理

     * @throws ClassNotFoundException

     */

    public void add() throws ClassNotFoundException{

   

    }

   

    public static void main(String[] args) {

   

        ExceptionDemo ed = new ExceptionDemo();

        //因为该方法抛出的是运行时异常,即使不处理也不会发生编译错误

        ed.division();

        //该方法抛出的是检查时异常,要求开发者显示处理

        //如果不处理则编译错误

        //add.hello();

   

        try {

            //此处会抛出ArithmeticException

            int i = 1/0;

        }catch (ArithmeticException e) {

            //catch语句块捕获了该异常

            e.printStackTrace();

            //若不处理异常,程序会中断,不会执行到这里

            System.out.println("异常处理");

        }

    }

}

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好教员好

您的鼓励是我前进动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值