异常处理: 用方法的特定返回值来表示异常情况,并将其打印出来。 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