关于异常

Java的基本理论是“结构不佳的代码不能运行”。Java使用异常来提供一致的错误报告模型,使得构件能够与客户端代码可靠地沟通问题使用异常可以降低错误处理代码的复杂度。当抛出异常时,会像其他对象一样在堆上创建一个异常对象,当前的代码执行会被终止,并且从当前环境中弹出对异常对象的引用。

    异常通常由try、catch、finally三块组成,接下来将会用四个例子来解释异常的执行顺序(省略main方法)。

 1.当catch、finally块中都有返回(return)时

public class Test {
    public static int getResult(){
        int i = 2;
        try{
            i++;
            System.out.println("try i="+i);
            return i/0;

        }catch (Exception e){
            i--;
            System.out.println("catch i="+i);
            return i;//程序执行此句代码,保存i的值,但不返回,并进入finally块中

        }finally {
            i=10;
            System.out.println("finally i="+i);
            return i;finally块中有return返回,结束方法

        }
    }
}

 

当执行此方法时,由于除数为0,系统将检测到异常,并由catch块进行处理,无论如何,finally块都会被执行,由于finally中有return返回,故在finally块中直接返回此方法。执行结果为:

 

try i=3
catch i=2
finally i=10
10

    2.当catch中有return,finally中没有return时

public class Test {
    public static int getResult(){
        int i = 2;
        try{
            i++;
            System.out.println("try i="+i);
            return i/0;

        }catch (Exception e){
            i--;
            System.out.println("catch i="+i);
            return i;//程序执行此句代码,保存i的值,但不返回,并进入finally块中

        }finally {
            i=10;
            System.out.println("finally i="+i);//finally块中无return返回,返回执行catch中的return语句
        }
    }
}

结果如下:

try i=3
catch i=2
finally i=10
2

    3.当catch中没有return,finally中有return时

public class Test {
    public static int getResult(){
        int i = 2;
        try{
            i++;
            System.out.println("try i="+i);
            return i/0;

        }catch (Exception e){
            i--;
            System.out.println("catch i="+i);
            
        }finally {
            i=10;
            System.out.println("finally i="+i);
            return i;
        }
    }
}

结果如下(运行过程同例1):

try i=3
catch i=2
finally i=10
10

    4.当未检测到异常时

public class Test {
    public static int getResult(){
        int i = 2;
        try{
            i++;
            System.out.println("try i="+i);
            return i/1;

        }catch (Exception e){
            i--;
            System.out.println("catch i="+i);

        }finally {
            i=10;
            System.out.println("finally i="+i);
            return i;
        }
    }
}

若无异常,则跳过catch块,结果如下:

try i=3
finally i=10
10

异常使用指南(Thinking In Java):

    1.在恰当的级别处理问题

    2.解决问题并且重新调用产生异常的方法

    3.进行少许修补,然后绕过异常发生的地方继续执行

    4.用别的数据进行计算,以替代方法的预计会返回的值

    5.把当前环境中能做的事情尽量做完,将异常抛到更高层

    6.终止程序

    7.进行简化

    8.让类库和程序更安全

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值