异常的处理

1.什么是异常

异常情况是指程序在运行时,可能由与外部系统的条件变更(与我们一厢情愿所设想的不一设)而导致程序可能会出错的情况。简单来说就是程序运行中不正确的情况。

2.java中异常以什么样的形式存在?

异常以类的形式在java中存在。

 3.异常的继承机制

从上面这幅图可以看出,Throwable是java语言中所有错误异常的超类(万物即可抛)。它有两个子类:Error、Exception。

Error和Exception最大的区别就是Error的异常不能通过程序处理,一般只能放着不管。Exception 的异常可以通过程序来解决,它又分为两种CheckedException(受检异常),一种是UncheckedException(不受检异常)。其中CheckException发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。而UncheckedException发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的,难以排查,我们一般都需要纵观全局才能够发现这类的异常错误,所以在程序设计中我们需要认真考虑,好好写代码,尽量处理异常,即使产生了异常,也能尽量保证程序朝着有利方向发展。

4.异常的处理方式

4.1try...catch

try指“尝试”执行可能出现异常的代码,如果成功,则乎略备用方案,即(B)区的代码;但如失败,代码会catch(捕获)到一个异常对象,放弃(A)计划,开始执行(B)计划!

try catch结构的异常处理提供了这样一种机制:如果代码执行成功,程序流程正常,(B)块的代码将不会执行;如果执行时(A)代码前的语句出现异常,(A)代码将不会执行,程序跳转到(B)代码块开始执行,同时,可(B)代码块中可以得到Exception类型变量ef对这个异常对象的引用,可以调用ef. printStackTrace();方法打印出异常的详细细信息;这为程序从错误中恢复提供了可行的手段。

public class Text {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数据");
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        try {
           int num=a/b;
            System.out.println("正确");
        } catch (Exception e) {
            System.out.println("输入的除数不能为0");
            e.printStackTrace();
        }
    }
}

 

 4.2try....catch....finally

那这些必须关闭的资源应该放在那里呢?放在try中,不行吧,如果出现异常,那try中的代码就不会执行了,如果放在catch中,那如果ctach捕获的异常不一样,那也不会执行,所以java就给我们准备了这样一个东西,这就是finally块,finally块表示程序不管是否发生异常,总会执行.现在我们把上面的代码进行优化:

public class Text {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数据");
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        try {
           int num=a/b;
            System.out.println("正确");
        } catch (Exception e) {
            System.out.println("输入的除数不能为0");
            e.printStackTrace();
        }finally{
            System.out.println("我会出来吗");
        }
    }
}

 

程序报了异常后finally里的语句任然输出。

4.3throw方法 

在方法声明的位置上使用 throws 关键字抛出,谁调用我这个方法,我就抛给谁。抛给 调用者 来处理。

这种处理异常的态度上报

public class Text {

    public static void main(String[] args)  {

        Scanner scanner = new Scanner(System.in);

        int a=scanner.nextInt();

        try {

            jue(a);

        } catch (Myyicahng myyicahng) {

            myyicahng.printStackTrace();

        }

    }

    public static void jue(int a) throws Myyicahng{

        if(a>=0&&a<=100){

            System.out.println("输入成功");

        }else{

            System.out.println("分数必须在0—100之间");

            throw new Myyicahng();

        }

    }

}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值