我是靠谱客的博主 高高玫瑰,最近开发中收集的这篇文章主要介绍java异常机制详解概述捕获异常捕获所有异常try catch finally,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

概述

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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部