JAVA中的异常处理关键字有try,catch,throw,throws,finally;try语句用来测试有无异常,catch语句用于捕获异常,throw,throws用于抛出异常,而finally语句无论有无异常,即使碰到了return语句,他都会被执行,言下之意,他会被无条件执行。
运行的顺序是这样的,先运行try中的语句,如果抛出了一个异常,则try语句停止执行,生成某种异常类的一个对象,检查catch中是否能捕获到这种异常,如果可以,则转到对应catch语句执行,然后向下继续执行,否则,程序运行终止。
应用以下的语句可以打印出异常信息,string getMessage(),得到异常信息; string toString()可以获得异常信息的简短描述;void printStackTrace()可以获得异常所在的行数;
Catch语句的格式是这样的,catch(异常类 异常类对象),异常类可以分为两种,RunTimeException,和IO异常类,一切异常类的祖先类都是Exception,根据多态性原来,在catch语句中只要写Exception就可以捕获一切异常,但是一般情况下,我们需要写出更加具体的异常,比如说ArithmeticException和FileNotFoundException,一般的格式是吧具体异常捕获语句catch写在前面,而通用的catch(Exception e)语句写在最后。
当然也可以自定义异常类,该类必须继承自Exception类,用super()向父类传递信息。
Throw由于抛出具体异常,throws用于声明抛出异常类型。
写了一个代码,其中的自定义异常类没用上。但是代码是正确可以运行的,如下:
Class ThrowException
{
int division(int a ,int b) throws Exception
{
return a/b;
}
}
class MinusDivisionException extends Exception
{
MinusDivisionException(String str)
{
super(str);
}
}
class ExceptionTest
{
public static void main(String[] args)
{
ThrowException ex=new ThrowException();
try
{
System.out.println(ex.division(5,0));
}
catch(ArithmeticException e)
{
System.out.println(e.toString());
}
catch(Exception exc)
{
System.out.println(exc.toString());
}
finally
{
System.out.println("it's only a test");
}
}
}