异常处理可加强程序的健壮性,方法中定义了抛出异常则强制程序员在调用方法时处理异常。
一个方法被覆盖时,覆盖它的方法需抛出相同的异常或异常的子类(亦可以没有异常)。
如果父类抛出多个异常,则覆盖方法必须扔出那些异常的的一个子集,不能抛出新的异常
package exception;
class Test{
public int devide(int x,int y) throws ArithmeticException,Exception{
if(y<0) throw new DevideByMinusException("devide is"+y);
return x/y;
}
}
class ExTest extends Test{
public int devide(int x,int y) throws ArithmeticException{ //覆写的方法不能抛出新的异常
}
}
//自定义异常
class DevideByMinusException extends Exception{
DevideByMinusException(String msn){
super(msn);
}
}
public class TestException {
public static void main(String[] args) /*throws Exception*/{
//TODO Auto-generated method stub
try{
new Test().devide(3, -1); //除数为-1,则Test中抛出 DevideByMinusException异常,被try-catch捕获
}catch(ArithmeticException e){
System.out.println("ArithmeticException Happen");
e.printStackTrace(); //直接将异常状况信息打印
} //捕获算术异常
catch(DevideByMinusException e){
System.out.println("DevideByMinusException Happen");
e.printStackTrace();
} //捕获自定义的异常
catch(Exception e){
System.out.println(e.getMessage());
System.exit(0); //程序退出,finally不会被执行
} //只能放在最后,放在前面的话后面的就不会被执行
finally{
} //不管try是否发生错误,finally都要执行,如果try中有return之类的返回语句,则下面的不会被执行,但finally总是会被执行的,除非上面有System.exit(0)则程序则不会被执行
System.out.println("Programme is running");
}
}
//用try-catch来实行语句跳转
void fun(){
try{
if(x==0) throw new XException("XXX");
else throw new YException("YYY");
}
catch(XException e){
}
catch(YException e){
}
}