面向对象的异常处理机制

来源:互联网 发布:网店美工下载 编辑:程序博客网 时间:2024/06/05 02:42

1,从安全的角度来讲,面向过程的异常处理是更为安全的,因为面向过程是事前处理,而面向对象是事后处理。

从编程和理解的角度来讲,面向对象的处理方式更为方便易懂,因为他是正常代码和处理异常分开的,从而使程序具有处理错误的能力。


2,另一方面

面向过程语言错误处理方式是有缺陷的:

1)不进行范围检查(数据范围错误,如数组下标越界)
2)采用if语句进行事先判断以防止出现错误。

3,虽说java也是有他的缺陷但是java还是一门安全的语言:

1)Java语言提供严密的语法规则。
2)Java在编译和运行时严格检查错误。
3)Java提供异常处理机制。
4)Java提供内存自动管理方式。


4,java中的异常和错误

1)错误(error)指程序运行时遇到的硬件或操作系统的错误。 Error错误类

2)异常(exception)指在硬件和操作系统正常时,程序遇到的运行错。 Exception异常类


5,异常和错误的全部分类,继承。


6,几个值得关注的RuntimeException运行异常类:

1)算术异常ArithmeticException:除数为0
2)空对象异常NullPointerException
      int a[] = null;
      a[0] = 1;                           //对空数组中的元素进行操作
     String str = null;
     str.length()                    //调用空对象的方法
3)类型强制转换异常ClassCastException
      Object obj = new Object();
      String str = (String) obj;

4)负数组长度异常NegativeArraySizeException    
     int a[] = new int [-1];
5)数组下标越界异常ArrayIndexOutOfBoundsException
     int a[] = new int[1];
     a[1] = 1;
6)字符串序号越界异常StringIndexOutOfBoundsException
     "abc".charAt(-1)
7)数值格式异常NumberFormatException
      int j = Integer.parseInt("abc");

7,程序对错误与异常的三种处理方式

1)程序不能处理错误
2)程序应避免而不捕获的异常,如除数为0、数组下标越界等。
3)必须捕获的异常

8,下面使用一个计算数组平均值的例子解读异常的使用:

public class ArrayAverage {        //需求:求一个整数数组的平均值public static double average(int table[]){//方便if判断的要用if处理,如空指针异常、数组长度为0if(table!=null && table.length!=0){//注意,两个布尔表达式顺序不能颠倒double sum=0;for(int i=0;i<table.length;i++){sum = sum + table[i];}return sum/table.length;}return 0;}//需求: 求两个整数数组的平均值public static double average(int table1[], int table2[]){if(table1==null || table1.length==0){return average(table2);}//程序能够运行到这里,说明table1非空,且元素个数大于0if(table2==null || table2.length==0){return average(table1);}//程序能够运行到这里,说明table1和table2都为非空,且元素个数大于0int count=table1.length+table2.length;double sum=0;for(int x:table1){sum +=x;}for(int x:table2){sum +=x;}return sum/count;}//需求: 把一个字符串数组中的整数提取出来,生成一个整数数组返回public static int[] tointArray(String str[]){if(str!=null && str.length!=0){int a[] = new int[str.length];int i=0,n=0;while(i<str.length){try {a[n]= Integer.parseInt(str[i]);//"12", "abc12"n++;}catch (NumberFormatException e) {System.out.println(str[i]+"不能转换成整数");}catch (Exception e) {System.out.println("出现没想到的异常");}finally{i++;}}//经过上面的循环,a[]中的前n个数据是有效的,后面的是无效的。//把有效元素提取成新的数组int b[] = new int[n];System.arraycopy(a, 0, b, 0, n);return b;}return null;}}


原创粉丝点击