面向对象的异常处理机制

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处理,如空指针异常、数组长度为0
		if(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非空,且元素个数大于0
		if(table2==null || table2.length==0){
			return average(table1);
		}
		
		//程序能够运行到这里,说明table1和table2都为非空,且元素个数大于0
		int 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;
	}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值