【谈谈】有关异常

异常处理:
用方法的特定返回值来表示异常情况,并将其打印出来。
Java异常处理的优点:
(1)把各种不同类型的异常情况进行分类,用Java类来表示异常情况,这种类被称为异常类。把异常情况表示成异常类,可以充分发挥类的可扩展和可重用的优势。
(2)异常流程的代码和正常流程的代码分离,提高了程序的可读性,简化了程序的结构。
(3)可以灵活的处理异常,如果当前方法有能力处理异常,就捕获并处理它,否则只需要抛出异常,由方法调用者来处理它
具体操作实施:
在下面的操作代码中可以看见,主函数代码为了方便使用运用了大量if…else做异常的反馈机制,过于麻烦,代码也有些冗余,还要程序员自己做异常判断。不够优化

public class Caculate {

    private  static boolean isNum(String num){
        for(int i=0;i<num.length();i++){
        char t=num.charAt(i);
        if(t<48||t>57){
            return false;
        }
        }
        return true;
    }
    public static void main(String []args) {

        if (args != null && args.length >= 2) {
            String num1 = args[0];
            String num2 = args[1];
            if (isNum(num1) && isNum(num2)) {
                int n1 = Integer.parseInt(num1);
                int n2 = Integer.parseInt(num2);
                if(n2!=0){
                System.out.println((double) n1 / n2);
                }else{
                    System.out.println("除数不能为0");
                }
            } else {
                System.out.println("两个参数必须是数字");
            }
        }else{
                System.out.println("必须有命令行参数,且参数为两个");
            }
        }
    }

于是这里我们使用了Java自身的异常处理机制
在这里列举Java的异常处理机制:转自:https://blog.csdn.net/qq_41589166/article/details/80457882
1、try···catch语句
在try代码块中抛出异常之后,立即转到catch代码块执行或者退栈到上一层方法处寻找catch代码块。
2、finally语句:任何情况下都必须执行的代码
由于异常会强制中断正常流程,这会使得某些不管在任何情况下都必须执行的步骤被忽略,从而影响程序的健壮性。使用finally语句,不管try代码块中是否出现了异常,都会执行finally代码块。
在某些情况下,把finally的操作放在try···catch语句的后面,这也能保证这个操作被执行。这种情况尽管在某些情况下是可行的,但不值得推荐,以为它有两个缺点:
@把与try代码块相关的操作孤立开来,使程序结构松散,可读性差。
@影响程序的健壮性。假如catch代码块继续抛出异常,就不会执行catch代码块之后的操作。
3、throws子句:声明可能会出现的异常
如果一个方法可能会抛出异常,但没有能力来处理这种异常,可以在方法声明处用throws子句来声明抛出异常。
一个方法可能会出现多种异常,throws子句允许声明抛出多个异常,中间用“,”隔开。
异常声明是接口(概念上的接口)的一部分,在JavaDoc文档中应描述方法可能抛出某种异常的条件。根据异常声明,方法调用者了解到被调用方法可能抛出的异常,从而采取相应的措施:捕获异常,或者声明继续抛出异常。
4、throw语句:抛出异常
throw语句用于抛出异常。
值得注意的是,有throw语句抛出的对象必须是java.lang.Throwable类或者其他子类的实例。
try…catch。

public class Caculate1 {
    public static void main(String []args) {
     try {
         String num1 = args[0];
         String num2 = args[1];
         int n1 = Integer.parseInt(num1);
         int n2 = Integer.parseInt(num2);
         System.out.println(n1 / n2);
     }catch(Throwable e){//所有异常类的父类
     //catch(Exception e){//程序员可处理异常可分为运行时异常(RuntimeException){可处理可不处理,会打印出错误} 和非运行时异常/受控异常(){不处理无法编译}
         //System.out.println(e);
     e.printStackTrace();//打印栈帧中信息
     }
    }
}

throw抛出对象
这里是自己构造的运行时异常

public class 抛出 {
    public static void main(String[] args){
     try{
         String num1 = args[0];
         String num2 = args[1];
         int n1 = Integer.parseInt(num1);
         int n2 = Integer.parseInt(num2);
         if(n2==5){
             throw new RuntimeException("我這裏除5也不行");
         }
         System.out.println(n1/n2);
      }catch(Exception e){
            e.printStackTrace();
        }
    }
}

不仅代码间接了很多,程序员还无需自己做一一判断,优化了工作。
简介Java中异常分类:
在这里插入图片描述
图片内容转自:https://blog.csdn.net/TONGZONGE/article/details/90452120

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值