Java中的异常是指程序运行中的一些错误,比如,栈溢出(java.lang.StackOverflowError)、空指针异常(NullPointerException)以及内存不足(java.lang.OutOfMemoryError)等等,这些错误有时候可以通过人为因素而得意解决。值得注意的是并不是所有的错误都是异常。
Java中的异常用对象来表示。一般有两个来源,一是Java语言本身定义的一些基本异常类型。二是通过继承Exception类或其子类来定义的一些异常。这些异常在适当的条件下被抛出,使得程序有效的在适当的情况之下运行。
下面就让我们来看几种Java中的异常处理机制。JAVA异常处理通过五个关键字try catch throw throws finally来进行。一般情况下,try语句中块内出现异常,则异常会被抛出,在catch语句中捕获到这个异常并根据你所定义或者调用的方法来处理异常,通常,在使用try..catch语句是还会加上finally,它的含义是不论程序是否出现异常,怎么被处理,最后都要归结于这个方法,它是在任何情况下都必须被执行的代码,所以必须要保证该语句的可靠性才能使程序正确运行。
一般结构如下:
try{
......
}catch(异常类型1 异常对象1){
异常对象1.要调用的方法
}catch(异常类型2 异常对象2){
异常对象2.要调用的方法
}finally{
......
}
另一种语句搭配是throws...throw。通过throws关键字在方法上声明要抛出的异常,然后再方法内部通过throw抛出异常对象。
一般结构如下:
public void test()throws NewException{
...
}if(...){
throw new NewExcption();
}
}
还有一种比较便捷简单的方法,那就是通过Excption语句不断一层层的将问题移交给上一层调用它的类中,由上一层的类中的处理机制处理。这种层层抛出一直可以将错误抛到JAVA的虚拟机中,由虚拟机自带的方法自行解决。
值得注意的是如果找不到处理异常的代码块,可以调用异常对象的printStackTrace的方法,打印方法调用栈的异常信息。
最后让我们再来区分一下Java处理异常中几个拼写比较相像但是用法完全不同的语句,Throwable throws语句以及throw语句。类 Throwable是Java中所有异常和错误父类。它有两个直接的子类:Error和Exception。而throws语句和throw语句,前面已经介绍,throws语句总是出现在函数头中,用来标明该成员函数可能抛出的各种异常。而throw语句则出现在函数体中,调用try中的方法,终止程序,用来抛出一个异常。