记得最开始接触异常处理机制的时候,还是在画板的时候,见了个try{}catch{},不懂啊,现在才知道try{}中写的代码,是try 捕获得到的可能发生异常的代码,如果没问题就执行,如果出现异常,就交给catch{}处理。当然,异常机制不仅仅是try,catch。
Exception和Error的区别:
Exception一定是自己编写的代码出现了问题,而错误不一定是代码的问题,也可能是计算机的问题。
Exception是所有的异常的父类,Exception分为运行时的异常和强制异常。运行时的异常(顾名思义:就是运行时才会出现,在代码中却不会报错)有我最钟爱的空指针、数组下标越界和类型转换等。
各种空指针异常往上追溯就是没有给对象分配内存空间,有没有赋初值,这时候找到报错的那一行,在那一行前面添加输出行,看输出的参数是否为空值。
数组下标越界很好理解就是下标超出了数组的长度。
类型转换,这个刚刚知道,英文的是ClassCastException。我自个儿归纳的简单来说就是两个完全没有关系的类型不能转换,它不会在eclipse直接出现红线,而是运行的时候会出现这个错误。打个比方:往前追溯,所有人的祖先都是森林古猿,张三和李四也不例外,李四的儿子叫做李小四,你总不能硬把李小四说成也是张三的孩子吧。一样Test类和Student类的父类都是Object,但是Test类对象不能转换为Student类的呀,它们俩真的没有关系的说。
异常处理机制:
之前说了try{}catch{},还有try{}catch{}finally{},这个finally作为异常的统一出口,就是上面不管执行哪个,finally中的语句都会执行。有finally的时候语句块的编写中尽可能不要出现像throw或return这种语句,因为它是异常的统一出口,这样才可以避免不必要的问题出现。
来一段它们综合应用的代码哈:
public class ThrowDemo {
/**
* @param args
*/
public static void main(String[] args) {
ThrowDemo td=new ThrowDemo();//实例化对象
try{
System.out.println("除法操作:"+td.div(10,0));
}catch(Exception e){//进行异常的捕获
System.out.println("异常产生:"+e);
}
}
private int div(int i, int j) throws Exception {
int temp=0;//声明整形变量
try{
temp=i/j;
}catch(Exception e){
throw e;
}finally{
System.out.println("计算结束");
}
return temp;
}
}
如上所示: throws用在方法声明的地方,表示此方法不处理异常,交给调用此方法的对象处理。
throw表示在方法中手工抛出一个异常,自个儿理解相当于throw抛给了throws,throws又往方法外面抛。呵呵,先就这些。欢迎补充(*^__^*) 嘻嘻……