java中的异常处理机制可以使程序中的异常处理代码和正常业务代码分离,保证程序的优雅和健壮。
java的异常处理机制主要依赖
try、catch、finally、throw、throws
五个关键字
一、异常概述
- try关键字后面紧跟一个花括号括起来的代码块,简称try块,里面放置可能引发异常的代码。
- catch后对应异常类型和一个代码块,用于表明该catch块用于处理这类的代码块。
- 多个catch块后还可以跟一个finally块,finally块用于回收在try块中打开的物理资源,finally块总被执行。
- throws关键字主要用在方法签名中,用于声明该方法可能抛出的异常。
- throw用于抛出一个实际的异常,可单独作为语句使用。
二、异常处理机制
当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,实现将“业务功能实现代码”和“错误处理代码”分离,提供更好的可读性。
try{
//业务代码
}
catch(Exception e){
alert 输入不合法
goto retry
}
如果执行try块里的业务逻辑代码出现异常,java运行环境寻找能处理该异常对象的catch块(依次判断该异常对象是否是catch块后异常类或其子类),交给catch块处理,找不到则运行环境终止,java程序退出。
异常类的继承体系
Java把所有情况分类为:异常(Exception)和错误(Error),他们都基层Throwable父类。
Error错误一般是与虚拟机相关的问题,这种错误无法恢复或不可能捕获,通常应用程序不应该试图用catch块捕获Error对象。
public class ExceptionTest {
public static void main(String[] args)
{
try
{
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = a /b ;
System.out.println("your entered numbers' division is"+c);
}
catch (IndexOutOfBoundsException ie)
{
System.out.println("数组越界:运行程序时输入的参数个数不够");
}
catch (NumberFormatException ne)
{
System.out.println("数字格式异常,只能接受整数");
}
catch (ArithmeticException ae)
{
System.out.println("算数异常");
}
catch (Exception e)
{
System.out.println("未知异常");
}
}
}
正如前面看到的,将Exception类的catch块放到最后,也就是要遵循:先处理小异常再处理大异常的方式。否则后面的catch永远也捕获不到异常。
访问异常信息
如果程序需要在catch块中访问异常对象的相关信息,则可以通过访问catch块后的异常形参来获得。
- getMessage():返回该异常的详细描述字符串。
- printStackTrace(): 将该异常的跟踪栈信息输出到指定输出流。
- printStackTrance(PrintStream s): 将异常的跟踪栈信息输出到指定输出流。
- getStackTrace():返回该异常的跟踪栈信息。