---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------
六、异常1、所谓异常,就是程序在运行时出现的不正常情况。java中的异常,是通过java类的形式对不正常的情况进行描述,并封装成对象。在程序运行时,往往会出现一些问题,我们分为两个类型,一个是严重问题(Error),一个是非严重问题(Exception)。对于Error,我们是不允许存在的,在运行时,如果出现Error,就说明程序有错误。而Exception,有时候是不能避免的,比如,做除算时,分母为零的情况。这时候我们就会使用针对性的处理方式来处理异常。Error类和Exception类,都是Throwable类的子类。
2、异常的处理:try...catch...finally...
3、自定义异常:
在实际项目中,往往会出现一些特有的问题,而这些问题并没有被java中所描述。所以对于这些问题,可以按照java对问题的封装的思想,将这些特有的问题自定义为异常,封装起来。例如,在某些计算中,不能有负数的运算。
class FushuException extends Exception
{
......
}
4、RuntimeException:运行时异常
所谓运行时异常,就是说,程序中如果存在这个异常,而且没有对其进行处理,在编译时是没有问题的,在运行时,会被检测出,而且一旦出现这个异常,程序就会终止。
5、异常处理中的finally
finally的代码是一定会被执行的,不管是否出现异常。finally与外部代码的区别:
(1)①②两处代码都能执行到:
......
{
try{
可能出现异常的代码
}catch(异常 e){
异常处理
}finally{
System.out.println("finally");// ① finally中的代码
}
System.out.println("out code");// ② 外部中的代码
}
(2)①处finally的代码执行到,②处的外部代码执行不到:
......
{
try{
可能出现异常的代码
}catch(异常 e){
异常处理
return; //异常处理结束后return
}finally{
System.out.println("finally");// ① finally中的代码
}
System.out.println("out code");// ② 外部中的代码
}
(3)①②两处代码都执行不到:
......
{
try{
可能出现异常的代码
}catch(异常 e){
异常处理
System.exit(0);
}finally{
System.out.println("finally");// ① finally中的代码
}
System.out.println("out code");// ② 外部中的代码
}
由上面三个例子可以看出区别,值得注意的是,当在进入finally代码块之前,如果执行了“System.exit(0)”时,finally中的代码也不会被执行。
6、异常在子类和父类覆盖中的体现
(1)子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类;
(2)如果子类中出现了父类中没有的异常,那么这个异常必须在内部处理,不能抛出;
(3)如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集;
(4)如果父类或者接口的方法中没有异常抛出,那么子类在覆盖父类时,也不能抛出异常,如果子类中确实出现了异常,那就必须在内部处理,不能抛出。
7、异常的处理原则:
(1)处理方式有两种:throws(抛出) 或 try..
(2)调用到抛出异常的功能时,抛出几个就处理几个,一个try对应多个catch
(3)多个catch出现时,要把异常最上级的父类放到最后面。
(4)catch内,需要定义针对性的处理方式。当捕获到异常,但是在当前功能中不能对其进行处理时,可以继续抛出。如:
try{
throw new Exception();
}catch(Exception e){
throw e;
}
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net