Java基本功练习十八(异常处理【获取异常信息、链式异常和finally语句、自定制异常】)

来源:互联网 发布:ubuntu添加vga 788 编辑:程序博客网 时间:2024/05/21 10:46

在程序运行中,如果环境检测出一个不可能执行的操作,就会出现运行时错误(runtime error)。例如:

越界错误ArrayIndexOutOfBoundsException。

文件不存在错误FileNotFoundException等等。

    Java中,异常会导致运行时错误。异常就是一个表示阻止执行正常进行的错误或情况。如果异常没有被处理,那么程序将会非正常终止。

应该处理这个异常,以便使得程序可以继续运行或平稳终止。


范例一:异常处理的创建、抛出、捕获以及处理异常。

运行效果如图所示:

实现的源代码如下:

package Blog;public class blogTryProject{//获取异常的信息public static void main(String[]args){try{System.out.println(sum(new int[]{1,2,3,4,5}));}catch(Exception ex){ex.printStackTrace();System.out.println("\n"+ex.getMessage());System.out.println("\n"+ex.toString());System.out.println("\nTrace Info Obtained form getStackTrace");StackTraceElement[] traceElements = ex.getStackTrace();for(int i = 0;i < traceElements.length;i++){System.out.print("method "+traceElements[i].getMethodName());System.out.print("("+traceElements[i].getClassName()+":");System.out.println(traceElements[i].getLineNumber()+")");}}}private static int sum(int[] list){int result = 0;for(int i = 0;i <= list.length;i++)result += list[i];return result;}}

主要有三个异常,ArithmeticException、FileNotFoundException和InputMismatchException在Java API中有很多预定义的异常类,如下图所示:


范例二:链式异常和finally语句。

运行效果如图所示:

实现的源代码如下所示:

package Blog;public class blogTryProject{public static void main(String[]args){//链式异常ChainedExceptionDemo ced = new ChainedExceptionDemo();ced.main(args);//finally语句演示FinallyDemo fd = new FinallyDemo();fd.main(args);}}//链式异常class ChainedExceptionDemo{public static void main(String[]args){try{method1();}catch(Exception ex){ex.printStackTrace();}}public static void method1()throws Exception{try{method2();}catch(Exception ex){throw new Exception("New info from method1,",ex);}}public static void method2()throws Exception{throw new Exception("New info from method2");}}//finally语句演示class FinallyDemo{public static void main(String[]args){java.io.PrintWriter output = null;try{output = new java.io.PrintWriter("text.txt");output.println("Welcome to Java");}catch(java.io.IOException ex){ex.printStackTrace();}finally{if(output != null) output.close();}System.out.println("End of program");}}
范例三:自定制异常。

运行效果如图所示:

实现的源代码如下所示:

package Blog;public class blogTryProject{public static void main(String[]args){System.out.println("\n自定制异常");try{Circle c = new Circle();c.setRadius(-5);}catch(InvalidRadiusException ex){System.out.println("The invalid radius is "+ex.getRadius());}}}//自定制异常class InvalidRadiusException extends Exception{private double radius;public InvalidRadiusException(double radius) {super("Invalid radius "+radius);this.radius = radius;}public double getRadius(){return radius;}}//带半径异常的圆类自定义异常class Circle{private double radius;private static int numberOfObjects = 0;public Circle(){this(1.0);}public Circle(double newRadius){this.radius = newRadius;//setRadius(newRadius);numberOfObjects++;} public double getRadius(){return radius;}public void setRadius(double newRadius)throws InvalidRadiusException{if(newRadius >= 0)radius = newRadius;elsethrow new InvalidRadiusException(newRadius);}public static int getNumberOfObjects(){return numberOfObjects;}public double findArea(){return radius * radius * Math.PI;}}

0 0