一.什么是异常;
二.什么是异常处理;
三.异常在JVM的具体表现;
四.try-catch-finally结构,throws语句,throw语句以及throws与throw区别;
五.java中的异常类。
首先,认识一下异常,很简单,就是在某些情况下,当前程序或代码无法继续进行的问题。 而异常处理就是针对可能出现或已经出现的异常进行处理,使程序正常运行。Ok,最简单的处理就是if-else,提前判断就行。所以这也是在异常处理机制引入之前的异常处理方法。
其后,我们先了解一下方法的调用堆栈。java虚拟机用方法调用堆栈来跟踪每个线程中一系 列的方法调用过程。每个线程都有一个独立的方法调用堆栈,堆栈底部是程序的入口方法main(),放一个新的方法被调用时,java虚拟机就会把描述该方法的堆栈结构置入栈顶,位于栈顶的方法是正在执行的方法。该方法执行完毕后,会将处理器控制权交还给调用它的方法,以此类推。这样来看。我们就不难看出异常在JVM的具体表现了:当一个方法中的一个语句抛出异常时,如果该方法没有给出处理该异常的语句,那么该方法就会终止执行,并将这个异常传递给推栈中的下一个方法,直到某个方法中含有该异常处理的语句为止。如果该异常被传递至main()方法,仍然没有被处理,则异常将会被抛至JVM,程序中断。
理解上述后,想必大家对异常处理本质有一定了解,那么我们就具体看看java中关于异常处理给出的机制:
1.try-catch-finally语句
try{
可能抛出的异常的语句
} catch(Exception1 e){
异常处理代码
} catch(Exception2 e){
异常处理代码
}
.......
finally{
必须执行的代码
}
(1):如果try块中没有抛出任何异常,当try块中的代码执行结束后,finally中的代 码将会被执行。
(2):如果try块中抛出了一个异常且该异常被catch正常捕获,那么try块中至抛出异常代码之后的所有代码将会被跳过,程序接着执行与抛出异常类型匹配的catch子句中的代码,最后执行finally子句中的代码。
(3):如果try块中抛出了一个不能被任何catch子句捕获(匹配)的异常,try块中剩下的代码将会被跳过,程序接着执行finally子句中的代码,未被捕获的异常对象继续抛出,沿调用推栈顺序传递。
2.throws语句,通过调用产生异常的方法来处理这些异常。
<返回类型> 方法名 (参数)throws <异常类型列表>
{
方法体;
}
3.throw语句
在java中,所有方法都是通过throw语句来抛出一个异常事件,抛出异常首先需要通过throw语句生成一个异常类的对象。
throw new 异常类名;
如果大家对throws 与throw 有些迷茫。ok,看看一下四点区别;
1>.throws 代表一种状态,代表方法可能有异常抛出。
2>.throws用在方法声明中,而throw用在方法中。
3>.throws可以抛出多个异常,而throw只能用于抛出一种异常。
4>.throw代表动作,表示抛出一个异常的动作。
最后,我们简单了解一下java中的异常类,java.lang.Throwable类为父类,有Error子类和Exception子类,Exception类有RuntimeException子类和其他子类。RuntimeException类定义为运行时异常类,Exception类的其他子类定义为受检查异常类。运行时异常类是指因设计或实现方式不当导致的问题,也可以说是程序员的原因导致的问题,本来是可以避免发生的情况。包括算法错误,空指针异常,数组下标越界,非法强制转换类型等。
这里谢谢大家对本文的阅览。本文参考清华大学出版社《高级程序设计语言》,只是学习提高,无任何商业目的。