【JAVA】异常捕捉机制(3)—训练学习与总结

一、前言

前面我们说到异常(Exception)的概念与分类异常(Exception)的分类处理方式,所谓异常就是程序在运行的过程中出现的一些中断程序的例外问题,我们将其称之为异常。

JDK 中定义了很多派生于Throwable类的异常类,来对应解决可能出现的各种各样的异常,Throwable下又派生出来了子类ErrorException ,接下来我们进行编程训练学习并对其总结。

二、编程学习

1)除数为0

1.1 任务要求
  • 完成一个 java application应用程序,完成c=a/b 的计算并输出c的结果,可以为a和b在程序中赋初值、或者接收用户通过键盘输入a和b的数值文本后转换为数字等,在程序要求当 b 为0时c的计算结果正确。
1.2 程序代码
import java.util.Scanner;//导入位于util包下的Scanner类
public class ExceptionTest10{//创建类名
    public static void main(String[] args) {//主程序
        while(true){//循环语句
            System.out.print("求算式c=a/b的值"+"\n");//打印输出
            Scanner ex=new Scanner(System.in);//创建scanner接受键盘输入
            System.out.print("令a的值为:");//提示语句
            int a=ex.nextInt();//将输入的值给a
            System.out.print("令b的值为:");//提示语句
            int b=ex.nextInt();//将输入的值给b
            try{//将逻辑语句用try包起来
                int c=(a/b);//定义c等于a除以b
                System.out.print(" c= " +c);//输出c的值
                System.out.println("\n ");//空行
            }
            catch(ArithmeticException e){//当代码异常时用catch捕捉
                System.out.print("算式无意义,除数不能为0");//输出异常信息
                System.out.println(" \n");//空行
            }
        }
    }
}
1.3 执行结果

1

2)计算绝对值

2.1 任务要求
  • 完成一个 java application应用程序,完成一个计算绝对值表达式 |a-b|的功能。要求当b比a大时人为抛出一个自定义异常,在计算绝对值时通过异常捕捉机制完成此绝对值表达式的计算。
2.2 程序代码
import java.util.Scanner;//导入位于util包下的Scanner类
public class ExceptionTest11{//创建类名
    public static void main(String[] args) {//程序主入口函数,带命令行参数
        while(true){//循环语句
            //double a,b; //声明变量
            System.out.println("\n求算式|a-b|的值");//输出标题
            Scanner ex=new Scanner(System.in);//创建scanner接受键盘输入
            System.out.print("令a的值为:");//提示语句
            int a=ex.nextInt();//将输入的值给a
            System.out.print("令b的值为:");//提示语句
            int b=ex.nextInt();//将输入的值给a
            Yichangtext n=new Yichangtext(); //定义一个变量n
        try {  //将逻辑语句用try包起来
            int c=n.yc(a,b);//创建逻辑变量c
            System.out.println("c=|a-b|\n"+"=|"+a+"-"+b+"|="+c);//输出正确的逻辑数c
            }
        catch (Exception exc) { 当代码异常时用catch捕获异常
            System.out.println(exc.getMessage());//输出异常信息
            exc.printStackTrace();  //输出导致异常的信息
            int d = b-a;//创建异常变量d
            System.out.println("|a - b| = " +d); //输出异常后的|a-b|结果
            }
        }
    }
}
class MyException extends Exception{//自定义异常类,继承自Exception类
    public MyException(String msg){//创建构造函数
        super(msg);//用super继承父类
    }
}
class Yichangtext{//定义一个异常类,出现异常时抛出信息
    public int yc(int a,int b)throws MyException{//定义处理异常的函数
        int c;//定义一个逻辑变量c
        if(b>a){//用if语句判断是否b>a
            throw new MyException("此时b>a,抛出异常"+"\n");//抛出异常信息
        }
        else{
            c=a-b;//正常情况下输出绝对值
        }
        return c;//返回值
    }
 }
2.3 执行结果

2

注意

java中,如果 int/int 中除数为0,会抛出异常java.lang.ArithmeticException: / by zero,这个不难理解!但如果是浮点型,就不会报异常了!

总结如下:

  1. 0.0/0.0 得到的结果是NaN(not an number的简称,即"不是数字")。通过Double.isNaN(double x)来判断。 正数/0.0 得到的结果是正无穷大,即Infenity
  2. 负数/0.0 得到的结果是负无穷大,即Infenity。通过Double.isInfinite(double x)来判断。

三、总结

  1. Error与Exception都继承自Throwable类

  2. Error类层次描述了Java运行时系统内部错误资源耗尽错误

  3. Exception类是所有异常类的父类,其子类对应了各种各样可能出现的异常事件。

  4. 常见的异常类型

​ –ArithmeticException

​ –NullPointerException

​ –ClassCastException

​ –ArrayIndexOutOfBoundsException

​ –NumberFormatException

  1. 方法重写中声明异常原则:子类声明的异常范围不能超过父类声明的范围

  2. 异常处理的三种方式

​ –捕获异常:try-catch-finally

​ –声明异常:throws

  1. 自定义异常类只需从Exception类或者它的子类派生一个子类即可。

正常学习和开发中,我们经常会遇到各种异常。大家在遇到异常时,需要遵循下面四步来解决:

​ 1. 细心查看异常信息,确定异常种类和相关Java代码行号;

​ 2. 拷贝异常信息到百度,查看相关帖子,寻找解决思路;

​ 3. 前两步无法搞定,再问同学或同事;

​ 4. 前三步无法搞定,请示领导。

​ 很多同学碰到异常一下就慌了,立刻开始请教别人搬救兵,殊不知这样做有两大坏处。第一、太不尊重别人,把别人当苦力。第二、失去提高自我的机会,自己解决一个异常,就意味着有能力解决一类异常。解决一类异常能大大提高自身能力。
希望大家都一起加油努力!~


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值