• 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进行声明。)

  • 相关阅读:
    使用 Log4Net 记录日志
    NuGet安装和使用
    .NET Framework 4 与 .NET Framework 4 Client Profile
    “init terminating in do_boot” Windows10 Rabbit MQ fails to start
    Ubuntu / Win7 安装db2 v10.5
    Win7下的内置FTP组件的设置详解
    c/s模式 (C#)下Ftp的多文件上传及其上传进度
    C#路径/文件/目录/I/O常见操作汇总
    C# 遍历指定目录下的所有文件及文件夹
    Mongodb主从复制 及 副本集+分片集群梳理
  • 原文地址:https://www.cnblogs.com/mrchi/p/9216630.html
Copyright © 2020-2023  润新知