[第五章]第二节、异常处理实例分析

第二节、异常处理实例分析

以下是Java中一个错误处理的例子:

[MultiCatch.Java]

package Examples;

public class MultiCatch{

       public static void main(String[] args){

              try{

                     int a=args.length;        //将字符串数组args的长度赋给int变量a

                     System.out.println("args的长度是 "+a);              // 打印a 的值

                     int b=36/a;              //a36,当main方法无参数传入时会出现被零除错误

                     System.out.println("args的第2个参数是: "+args[1]);  //打印args第二个参数,

              }catch(ArithmeticException e){

                     System.out.println("无参数传入,args.length=0,出现错误 ");

                     System.out.println("Divide by 0: "+e);

              }catch(ArrayIndexOutOfBoundsException e){

                     System.out.println("传入参数少于2个,出现错误 ");

                     System.out.println("Array Index Out of Bounds: "+e);

              }finally{

                     System.out.println("finally代码块:无论有无异常,这里仍然会执行");

              }

              System.out.println(“程序没有被终止!”);

       }

}

 

下面是运行在三种不同情况下程序的输出:

 

C:/javaApp>java Examples.MultiCatch

a = 0

无参数传入,args.length=0,出现错误

Divide by 0: java.lang.ArithmeticException: / by zero

finally代码块:无论有无异常,这里仍然会执行

程序没有被终止!

 

C:/javaApp>java Examples.MultiCatch test01

a = 1

传入参数少于2个,出现错误

Array Index Out of Bounds: java.lang.ArrayIndexOutOfBoundsException: 1

finally代码块:无论有无异常,这里仍然会执行

程序没有被终止!

 

C:/javaApp>java Examples.MultiCatch test01 test02

a = 2

args的第2个参数是: test02

finally代码块:无论有无异常,这里仍然会执行

程序没有被终止!

 

对比VBJava中的异常处理,我们可以要发现Java中的异常处理机制非常灵活和方便,而且不会中止程序的运行。但要注意的是,如果程序中出现异常时,我们没有为我们的程序提供异常处理,或找不到匹配的异常处理程序,那么异常最终会被Java运行时系统的默认处理程序捕获并终止程序运行。默认处理程序显示一个描述异常的字符串,打印异常发生处的堆栈轨迹并且终止程序。你可以尝试将上面例子中的第二个catch块去掉,那么运行在只有一个参数的情况下会出现错误,而且try/catch/finally代码块后的语句: System.out.println(“程序没有被终止!”);  将不会执行。

 如果一个finally块中出现或抛出(throw)了一个异常,那么这个异常会代替前面try代码块任何正在被抛出过程中的异常。如果一个finally块内使用一个return语句,那么即使一个异常已经被抛出并且还没有处理,这个方法也会正常返回。

 

下面是另外一个例子:

[ExceptionDemo.java]

 

package Examples;

import java.util.Random;              //导入 Random

public class ExceptionDemo{

       public static void main(String[] args){

              int a=0,b=0,c=0;

              Random r=new Random();  //创建Random类的一个实例

              for(int i=0;i<10;i++){

                     try{

                            b=r.nextInt();      //使用Random类实例的nextInt()方法来获取一个随机

                            c=r.nextInt();    // int 类型整数

                            a=12345/(b/c);     // cb,结果用来除12345,以增加被零除错误机会

                     }catch(ArithmeticException e){

                            //  e.printStackTrace();  这个语句被我注释掉了,它的作用后面有讲

                            System.out.println("Division by zero."); // 打印出错误,

                            a=0;                      //这里设置a为零

                     }

                     System.out.println(" a is : "+a);

              }

       }

}                  

编译运行后的某次输出如下(每次运行的结果都不相同):

 

a is : -2469

a is : -12345

a is : -6172

a is : -6172

a is : -1234

a is : 12345

Division by zero.

a is : 0

a is : -6172

a is : -12345

Division by zero.

a is : 0

 

上面程序中的“e.printStackTrace();”语句如果没有注释掉的话,那么在每句“Division by zero.”前会输出:

java.lang.ArithmeticException: / by zero

        at Examples.ExceptionDemo.main(ExceptionDemo.java:11)

java.lang.ArithmeticException指明异常类型,后面的“/ by zero”是具体异常描述

Examples.ExceptionDemo.main指明异常在Examples包中的ExceptionDemomain方法中

最后指明java文件名称及出现错误代码位置:ExceptionDemo.java 中的第11行。
发布了54 篇原创文章 · 获赞 0 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章