zoukankan      html  css  js  c++  java
  • java的异常处理机制

    在java中提供了一个throwable接口,其中错误和异常都是对于这个接口的实现。

    对于错误来说,程序员通常无能为力,一旦发生,只能想办法让程序优雅的退出。例如,常见的错误有:

    VirtualMachineError:java虚拟机运行错误,或者虚拟机运行不能得到足够资源

    OutOFMemoryError:因为内存越界java虚拟机不能定位对象,或者内存不足,不能进行垃圾回收时抛出

    StackOverflowError:栈溢出时抛出

    LinkageError:两个类之间存在依赖关系,当被依赖的类发生变化是抛出

    由于错误的发生程序猿无能为力,我们能做的就只能是去关注异常,对于特定的异常进行处理。

    异常分为运行时异常和其他异常两种。运行时异常是由程序员在代码里处理不当造成的是unchecked的,而其他异常是由外部原因造成,是checked的。

    下面说一下checked异常和unchecked异常的区别:

    checked异常必须被捕获,并指定错误处理器handler,否则编译无法通过。

    unchecked异常可以不处理,编译时不会出现问题,但是执行时出现就会导致程序失败。

    unchecked异常的出现实际就是因为我们对于代码的处理不当造成的,因此我们可以通过改变代码来消除这些异常。而对于checked异常,其由外部原因造成,大部分是用户操作不当,对于这个问题我们不能很好的方法,因此应该对于checked异常额外重视。有关checked异常的关键字主要有

    try

    catch

    finally

    throws

    throw

    其使用就类似于:

    将可能抛出异常的代码段放在try中,然后用下面的catch捕获异常,由于我们在程序中可能对于很多资源进行了申请,一旦程序抛出异常,try中抛出异常语句后面的语句都不会被执行,而是直接跳到catch语句,这就可能造成很多资源没有被合理的关闭,这个时候finally就发挥了作用,无论是否有异常发生,finally都会被执行,因此可以将那些关闭资源的语句放在finally中被执行。

    对于throw,他的作用是对于异常进行抛出,例如

    Exception e = new exception;

    throw e;

    而throws是在类或方法中,声明我的类或方法可能抛出什么异常,将这些异常交由上一层进行处理。(注意,一个异常如果被catch捕获,就不用再在throws中进行声明,只有那些在本类中没有被处理的,希望上层函数对于这个异常进行处理的异常才应被抛出,并用throws进行声明。)

  • 相关阅读:
    进程间通信、线程同步 概要
    【Stackoverflow好问题】将InputStream转换为String
    cocos2dx --- Widget 载入中 CCNode
    ZeroMQ注意事项
    2015第25周日
    2015第25周六
    2015第25周五
    2015第24周四
    2015第25周三iframe小结
    2015第25周二
  • 原文地址:https://www.cnblogs.com/mrchi/p/9216630.html
Copyright © 2011-2022 走看看