异常的概念
什么是异常?
在程序运行时打断正常程序流程的任何不正常情况称为异常
导致程序发生异常的原因
1.数组的下标越界
2.除法运算的除数为0
3.空指针访问
4.试图访问不存在的文件
java异常处理机制
Java语言的异常处理机制为提高Java程序的健壮性提供了良好的支持
♈ 当产生异常时,Java能够启用相应的异常处理程序
♈Java中的异常是类,和普通的类没有本质区别
异常情况举例
1.编写程序,从键盘上输入三角形的三条边长a,b,c,输出其面积
2.计算面积的海伦公式为
代码:
publicclassTestException{ publicstaticdoublecalculateArea(doublea, doubleb, doublec) { doublep= (a+b+c)/2; returnMath.sqrt(p*(p-a)*(p-b)*(p-c)); } publicstaticvoidmain(String[ ] args) { doublea=Double.parseDouble(args[0]); doubleb=Double.parseDouble(args[1]); doublec=Double.parseDouble(args[2]); doubles=calculateArea(a, b, c); System.out.println( "三角形面积是"+s); } }
运行命令:java TestException 3.0 4.0 5.0
输出:三角形面积是6.0
异常情况1
运行命令:java TestException
在控制台将显示数组访问越界的错误信息:
Exceptioninthread“main”java.lang.ArrayIndexOutOfBoundsException: 0atTestException.main(TestException.java:10)
造成上述异常的原因是:没有输入足够的参数,致使字符串数组args的长度为0。当访问第1个参数args[0] 时,数组访问会越界。
异常情况2
运行命令:java TestException 3.0 4.b 5.0
在控制台将显示数字格式异常的错误信息:
Exceptioninthread"main"java.lang.NumberFormatException: Forinputstring: "4.b"……atTestException.main(TestException.java:11)
造成上述异常的原因是:输入的第2个字符串参数4.b不是一个数字文本,无法转换成所需要的双精度数字类型
异常情况处理1
publicclassTestException{ publicstaticdoublecalculateArea(doublea, doubleb, doublec){ doublep= (a+b+c)/2; returnMath.sqrt(p*(p-a)*(p-b)*(p-c)); } publicstaticvoidmain(String[] args){ if (args.length<3) { System.out.println("输入的参数个数应至少为3个,请重新执行本程序"); } doublea=Double.parseDouble(args[0]); doubleb=Double.parseDouble(args[1]); doublec=Double.parseDouble(args[2]); doubles=calculateArea(a, b, c); System.out.println("三角形面积是"+s); } }
异常处理情况2
publicclassTestException{ publicstaticdoublecalculateArea(doublea, doubleb, doublec){ doublep= (a+b+c)/2; returnMath.sqrt(p*(p-a)*(p-b)*(p-c)); } publicstaticvoidmain(String[] args){ try{ doublea=Double.parseDouble(args[0]); doubleb=Double.parseDouble(args[1]); doublec=Double.parseDouble(args[2]); doubles=calculateArea(a, b, c); System.out.println("三角形面积是"+s); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("数组访问越界,请至少输入3个参数"); } } }
importjava.util.*; publicclassTestExceptionnew{ publicstaticdoublecalculateArea(doublea, doubleb, doublec) { doublep= (a+b+c)/2; returnMath.sqrt(p*(p-a)*(p-b)*(p-c)); } publicstaticvoidmain(String[] args) { Scannerreader=newScanner(System.in); doublea=reader.nextDouble(); doubleb=reader.nextDouble(); doublec=reader.nextDouble(); doubles=calculateArea(a, b, c); System.out.println("三角形面积是"+s); } }