异常的基本概念
异常是导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须要考虑各种异常的发生,并正确的做好相应的处理,才能保证程序正常执行。
***************
任何程序都可能存在问题,很难做到百分百完美
***************
1.为什么需要异常处理
在没有异常处理的语言中就必须使用判断语句,配合所想到的错误状况来扑捉程序中所有的错误,但是为了扑捉这些错误,编写出来的程序代码常有大量的判断语句,有时候这样也未必能捕捉到所有的错误,还会导致程序运行效率降低。
java异常处理正好弥补了这一个缺陷,
范例:认识异常
package test1; public class ExceptionDemo01 { public static void main(String[] args) { System.out.println("*****计算开始********"); int i = 10; int j = 0; int temp = i / j; System.out.println("两个数字相处结果:" + temp); System.out.println("*******计算结束*******"); } }
结果:
*****计算开始********
Exception in thread "main" java.lang.ArithmeticException: / by zero
at test1.ExceptionDemo01.main(ExceptionDemo01.java:8)
2.在程序中使用异常处理
【异常处理格式】
try{
//可能出现异常的语句
}
catch(异常类 异常对象){
//编写异常处理语句
}
...
[finally{一定会运行到的程序代码}]
范例:
package test1; public class ExceptionDemo01 { public static void main(String[] args) { System.out.println("*****计算开始********"); int i = 10; int j = 0; try { int temp = i / j; System.out.println("两个数字相处结果:" + temp); } catch (Exception e) { System.out.println("出现异常:" + e); } System.out.println("*******计算结束*******"); } }
*****计算开始********
出现异常:java.lang.ArithmeticException: / by zero
*******计算结束*******
这样程序就可以正常结束
3.异常类的继承结构
在整个java的异常结构中,实际上有两个最常用的类,分别为Exception和Error,这两个类全部是Throwable的子类,
①.Exception:一般表示的是程序中出现的问题,可以直接使用try'...catch处理
②.Error:一般指的是JVM错误,程序中无法处理
而算数异常,数字格式异常等都属于Exception的子类
***********
异常信息的输出方式
在catch语句输出异常时,除了可以直接使用“system.out.println(异常对象)”的方式打印异常信息外,有时候也会直接使用Exception类中的printStackTrace()方法输出异常信息,如:
e.printStackTrace();
使用这种打印异常方式是最完整的。
4.java的异常处理机制
异常处理的步骤:
①.一旦产生异常,则首先会产生一个异常类的实例化对象
②.在try语句中对此异常对象进行捕捉
③.产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码
.....明天继续....
package test2; public class ExceptionDemo06 { public static void main(String args[]) { System.out.println("------计算开始---------"); int i = 0; int j = 0; try { String str1 = args[0]; String str2 = args[1]; i = Integer.parseInt(str1); j = Integer.parseInt(str2); int temp = i / j; System.out.println("结果是:" + temp); } catch (ArithmeticException e) { System.out.println("算数异常:" + e); } catch (NumberFormatException e) { System.out.println("数字转换异常:" + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("数组越界异常:" + e); } catch (Exception e) { System.out.println("其他异常:" + e); } } }
注意:在java中所有捕获范围小的异常必须放在捕获大的异常之前。否则程序在编译时就会出现错误。后面的异常就不会被处理。