第六章异常的捕获及处理

六、异常的捕获及处理

6.1 认识异常

异常程寻中导致程寻中断的一种指令流。

6.2 处理异常

Java针对异常的处理提供了3个核心的关键字:try 、catch、finally,利用这3个关键字就可以组成以下异常处理格式。

try{
    //有可能出现异常的语句
        }[catch(异常类型 对象)]{
                //异常处理;
        }[catch(异常类型 对象)]{
        //异常处理;
        }[finally{
    //不管是否出现异常,都执行统一的代码;
        }]

应用异常处理格式

public class TestDemo {
    public static void main(String[] args) {
        // write your code here
        System.out.println("1.除法计算开始。");
        try{
            System.out.println("2.除法计算:"+(10/0));
            //异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行
            System.out.println("朱小东好帅");
        }catch (ArithmeticException e){
            e.printStackTrace();
        }finally {
            System.out.println("###不管异常我都执行###");
        }
        System.out.println("3.除法计算结束。");
    }
}

异常处理完整考虑

package com.company;

public class TestDemo {
    public static void main(String[] args) {
        // write your code here
        System.out.println("1.除法计算开始。");
        try{
            int x = Integer.parseInt(args[0]);
            int y=Integer.parseInt(args [1]);
            System.out.println("2.除法计算:"+(y/x));
            //异常产生之后的语句将不再执行,此处在try中产生异常,所以下面的输出不会执行
            System.out.println("朱小东好帅");
        }catch (ArithmeticException e){     //处理算数异常
            e.printStackTrace();
        }catch (NumberFormatException e){       //处理参数不足转换异常
            e.printStackTrace();
        }catch (ArrayIndexOutOfBoundsException e){  //处理数字转换异常
            e.printStackTrace();
        }finally {
            System.out.println("###不管异常我都执行###");
        }
        System.out.println("3.除法计算结束。");
    }
}

6.3 异常的处理流程

所有的异常类型最高继承类是Throwable ,并且在Throwable下有两个子类。

  • Error;指的是JVM错误,这时程寻并没有执行,无法处理;、
  • Exception:指的是程寻运行中产生的异常,用户可以使用异常处理格式处理。
  • Exception要写在ArithmeticException 之后,因为ArithmeticException是Exception的子类。
  • 在要求严格的项目里,异常一定要分开处理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SmHvQWXe-1655555852380)(D:\学习文件夹\Java\第一行代码Java\绘图1.png)]

6.4 throws关键字

throws关键字主要在方法定义上使用,表示此方法中不进行异常的处理,而是交给被调用处理。

class MyMath {
    public static int div(int x,int y)throws Exception{
        return x/y;
    }
}
public class TestDemo {
    public static void main(String[] args) {
    try {
            System.out.println(MyMath.div(10,2));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

6.5 throw关键字

自己手动化抛出一个实例化对象

try {
    throw new Exception("自己定义的异常!");
}catch (Exception e){
    e.printStackTrace();
}

6.6 异常处理的标准格式

package com.company;
class MyMath {
    public static int div(int x,int y)throws Exception{
        System.out.println("除法计算开始。");
        int result=0;
        try {
            result=x/y;
        }catch (Exception e){
            throw e;
        }finally {
            System.out.println("计算结束。");
        }
        return result;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        // write your code here

        try {
            System.out.println(MyMath.div(10,0));
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

6.7 RuntimeException类

程序在编译时不会强制性地要求用户处理异常,用户可以根据自己的需要有选择性的进行处理,但是如果没有处理又发生了异常,将交给JVM默认处理。

RuntimeException与Exception的区别

  • RuntimeException是Exception的子类;

  • Exception定义了必须处理的异常,而RuntimeException定义的异常可以选择性地进行处理。

  • 常见的RuntimeException有:

    NumberFormatException

    ClassCastException

    NullPointerException

    ArithmeticException

    ArrayIndexOutOfBoundsException

6.8 assert关键字

主要功能是进行断言。断言指的是程序执行到某行之后,其结果一定是预期的结果。

不会影响程序的执行。

public class TestDemo {
    public static void main(String[] args) {
        // write your code here
        int num=10;
        assert num==20;     //进行断言操作
        System.out.println("num="+num);
    }
}

6.9 自定义异常

如果想要自定义异常类,只需要继承Exception(强制)或RuntimeException(选择)父类即可

    int num=10;
    assert num==20;     //进行断言操作
    System.out.println("num="+num);
}

}


### 6.9	自定义异常

如果想要自定义异常类,只需要继承Exception(强制)或RuntimeException(选择)父类即可

**class  自定义异常类  extends  Exception**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值