Java中重复调用异常方法

直接上demo,首先给出一种不合理的方式,因为就有童鞋会这么做的,就是在异常的catch中继续调用本身。

public class HelloWorld {
    public static void main(String[] args){
        test();
    }
    public static void test(){
        try {
            new SimpleDateFormat("yyyy-MM").parse("2018/01");
        } catch (ParseException e) {
            test();
        }
    }
}

最终的结果就是:Exception in thread "main" java.lang.StackOverflowError,发生了error程序直接over了。

第二种给出较合理的方式,

public class HelloWorld {
    public static void main(String[] args){
        while (test()){
        }
    }
    public static boolean test(){
        try {
            new SimpleDateFormat("yyyy-MM").parse("2018/01");
        } catch (ParseException e) {
            return  true;
        }
        return  false;
    }
}

程序“正常”进行着,不会挂掉。

注:以上采用的都是死循环的方式,当然这只是为了方便演示而已。

下面针对以上2种方式以栈内存的形式表现出来:

第一种方式,栈内存里面方法只进栈但不出栈,test方法无限递归的循环下去,最后导致栈溢出。Java中重复调用异常方法_第1张图片

第二种方式,可以看出栈内存中始终只有一个test方法,因为每次test方法都顺序执行完毕。

Java中重复调用异常方法_第2张图片

综上,从内存中很清晰的看出两种方式的利弊了。学习中记录点点滴滴,以上如有错误,欢迎指正。

你可能感兴趣的:(java,异常)