关于异常
异常的处理思想是:你尝试(try)执行一段代码,捕获(catch)所有可能抛出的异常,最后(finally)作一些清理工作。
throws是异常的声明,它置于方法的定义处,后面不能跟任何语句,只能是异常类型;throw是异常的抛出,它置于方法体内,后面跟一个要抛出的异常的实例:例如:throw new IllegalValueException();括号中可以写下一些字符串信息之类的东西。
throw抛出的异常应该是throws中声明的异常或是这些异常的子集,但对于非检测异常无此限制。
异常分为可检测异常和非检测异常,当调用声明为可检测异常时,调用该方法的块一定要捕获异常,或者在方法的定义语句中用throws声明这个异常,但要遵循上面说的异常的子集关系.否则出错。
可以有多个catch块,每一个都指定自己的常类型。但有顺序要求,从想捕获的特定异常到想捕获的异常的超类。如果把带有Execption类型的catch块放在带有IOExecption类型的catch块前面会导致编译时错误。
try块自身里面不能再用try。try后要么跟catch,要么跟finally,或者两者都有,便不能什么都没有。
无论何时,只要有finally语句,该语句就被执行。如果遇到return;则finally语句块仍然会执行,但是紧接在finally块之后的语句将不会被执行!如果遇到System.exit(0);则finaly语句块和紧接在finally块之后的语句将不会被执行!
对于可检测异常,子类中覆盖的方法只能抛出超类方法抛出异常的子集,也可以不抛出任何异常。但对于非检测异常RuntimeException,则不会受这些约束,它们可以被随时抛出,也不受范围限制。
如果当继承的子类没有声明异常时,子类中的一个实例被声明为超类的类型时,这时再调用子类没有声明异常的方法,而用了catch,程序也会通过。
try和catch中的异常必须是有关系的,不然会出错。
throws 和throw不必一定成对出现
如果在方法中throw了一个异常,那么在该方法的声明之处一定要有throws这个东东,一般情况下throw是放在catch块里,在处理完后,然后throw,让调用该方法的方法能知道异常,使得程序更健壮
常见的异常:
检测异常:
ClassNotFoundException;
IOException;
FileNotFoundException;
IllegalAccessException;
InterruptedException;
MalformedURLException;
非检测异常:
ArithmeticException;
ArrayindexOutOfBoundsException;
ArrayStoreException;
ClassCastException;
EmptyStackException;
IllegalArgumentException;
InvalidParameterException;
NullPointerException;
NumberFormatException;
StringIndexOutOfBoundsException;
本文地址:http://com.8s8s.com/it/it14949.htm