手机版
你好,游客 登录 注册
背景:
阅读新闻

对Java异常的简单理解

[日期:2017-04-14] 来源:Linux社区  作者:zouheng [字体: ]

Java异常的本质是什么?

从本质上来讲,Java异常是一个Java对象(继承Object),和一般的Java对象一样,封装了一些成员变量和操作,我们可以向操作一般Java对象那样去操作Java异常对象(我还特地去试了试可不可以使用throw关键字操作一般的Java对象,发现编译错误,证明它仅仅是操作异常类的语法)

从代表的含义上来说:Java异常是一种错误情况,是程序不希望出现的现象,但是由于程序本身的设计逻辑和运行的环境等因素,出现异常的情况不可避免,Java虚拟机针对不同的异常情况定义了很多异常类,当jvm运行程序发现对应的异常时,将会向外面抛出异常

Java如何处理异常?

Java提供了抛出异常捕获异常的逻辑用于处理异常,当程序抛出异常时,如果不存在捕获异常逻辑,正在执行的方法将停止执行,并将该异常向外抛出,调用该方法的程序进行同样的处理,如果也没有进行捕获,则将一层一层的向外抛出,直到到达当前线程处时将会终止线程的执行。

处理异常的逻辑是使用try catch finally语句块,这个语句块允许通过对可捕获的异常进行异常处理,类似于一个条件判断一样,当出现异常时我们应该干什么,try catch finally语句块的具体语法规则见其他资料,这里说一下一些容易被忽略的地方:

1)在try块中和finally块中都存在对同一变量的操作,同时在try块中会返回该变量,具体如下:

public static int test(){
        int i=10;
        try{
            return i;
        }finally{
            i= i+2;
        }
    }

则调用该方法将返回一个什么值?按照道理说,finally最后将被执行,应该返回12,实际上返回的是10,这是因为在执行到return语句时会创建一个临时变量用于存放返回值i,执行完finally后再返回临时变量的值,对于基本数据类型因为是值传递,所有finally操作的是方法中的变量而没有操作临时变量的数据,因此不会生效,如果是对象,因为临时变量存放的是对象的变量,因次在finally中的操作将会生效,这里有些问题就是包装类和String类和基本类型一样不会生效,不知道什么原因。

2)如果是自定义的Java类型,则finally中的修改将会生效,具体如下:

public static data test(){
        data d = new data();
        try{
            return d;
        }finally{
            d.inte=15;
        }
    }
    private static class data{
        public int inte=10;
    }

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-04/142780.htm

linux
相关资讯       Java异常 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款