概述
概述
java的基本概念是:结构不佳的代码不能运行。
发现错误的理想时机是在编译阶段,也就是在试图运行程序之前。然而编译器并不能找出所有的错误,余下的问题必须在运行期间解决。
异常情形是指阻止当前方法或者作用域继续执行的问题。在这里一定要明确一点:异常代码某种程度的错误,尽管Java有异常处理机制,但是我们不能以“正常”的眼光来看待异常,异常处理机制的原因就是告诉你:这里可能会或者已经产生了错误,您的程序出现了不正常的情况,可能会导致程序失败!
那么什么时候才会出现异常呢?只有在你当前的环境下程序无法正常运行下去,也就是说程序已经无法来正确解决问题了,这时它所就会从当前环境中跳出,并抛出异常。抛出异常后,它首先会做几件事。首先,它会使用new创建一个异常对象,然后在产生异常的位置终止程序,并且从当前环境中弹出对异常对象的引用,这时。异常处理机制就会接管程序,并开始寻找一个恰当的地方来继续执行程序,这个恰当的地方就是异常处理程序,它的任务就是将程序从错误状态恢复,以使程序要么换一种方法执行,要么继续执行下去。
总的来说异常处理机制就是当程序发生异常时,它强制终止程序运行,记录异常信息并将这些信息反馈给我们,由我们来确定是否处理异常。
java异常体系的类图为:
图片来源:https://blog.csdn.net/zhangerqing/article/details/8248186
捕获异常
在java里引入了监控区域的概念。它是一段可能产生异常的代码,并且后面跟着处理这些异常的代码。
try块
如果在一个方法内部抛出了异常,或者方法内部调用其他方法抛出了异常,这个方法将在抛出异常的过程中结束,如果不希望方法结束,可以在方法内设置一个特殊的块来捕获异常。这个块就是try块。跟在try关键字后的普通程序块,这个程序块可能产生异常。
try{
...
}
异常处理程序
当然,try快抛出的异常必须在某处得到处理,这个地方就是异常处理程序。异常处理程序紧跟在try块之后,以关键字catch表示
try{
//可能抛出异常的代码
}catch(Type1 id1){
//异常类型Type1的处理
}catch(Type2 id2){
//异常类型Type2的处理
}
终止与恢复
时间证明:应用更加广泛的异常处理模型是终止模型:即异常发生之后,程序不会回到异常发生的地方继续执行。
捕获所有异常
可以写一个异常处理程序来捕获所有类型的异常。通过捕获异常类型的基类Exception就可以做到这一点。
catch(Exception e){
...
}
最好把它放在其他的异常处理程序之后,以防止它抢在其他处理程序之前先把异常捕获了。
另外如果java本身提供的异常类型并不能预见所以的错误,因此不必拘泥于java中已有的异常类型,可以自己定义异常类型来表示程序中可能会遇到的特定问题。
要自己定义异常类,必须从已有的异常类型继承,最好是选择意思相近的异常类继承。
栈轨迹
stacktrace直译过来就是堆栈跟踪的意思。
printStackTrace方法所提供的信息可以通过getStackTrace方法来直接访问,这个方法将返回一个由栈轨迹中的元素构成的数组。其中每一个元素都表示栈中的一帧。数组中的最后一个元素和栈底是调用序列中的第一个方法调用。
public class WhoClalled {
public static void main(String[] args) {
f();
System.out.println("................");
g();
System.out.println("................");
h();
}
private static void f() {
//生成一个异常来获取它的stack trace
try {
throw new Exception();
} catch (Exception e) {
for (StackTraceElement ste : e.getStackTrace()) {
System.out.println(ste.getMethodName());
}
}
}
private static void g() {
f();
}
private static void h() {
g();
}
}
上面代码的打印结果为:
f
main
................
f
g
main
................
f
g
h
main
这里只打印了方法名,但是实际上是可以打印整个的StackTraceElement。
问题:如何查看一个方法的调用栈?
答:可以通过异常的getStackTrace方法来获得
try catch finally
化繁为简,不用管太多,记住一句话即可:在实际项目中,finally常常是用来关闭流或者数据库资源的,并不额外做其他操作,它的作用是finally里面的代码总是会得到执行
最后
以上就是高高玫瑰为你收集整理的java异常机制详解概述捕获异常捕获所有异常try catch finally的全部内容,希望文章能够帮你解决java异常机制详解概述捕获异常捕获所有异常try catch finally所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复