声明:
写这片博客主要是为了帮自己加深对java异常处理的理解,文章类型选择了原创,若有雷同,都怪课本吧
什么是异常呢?通俗的讲,异常就是程序在运行过程中不期望的行为,比如,函数的参数类型不对、文件找不到、网络连接超时等。
Java所有的异常都有一个共同的祖先--Throwable,下图描述了Java异常类的层次关系。
其中,Throwable有两个子类:Error 和Exception,两者都是Java异常处理的重要子类,各自都包含大量的子类
Error:是程序无法处理的错误,也就是在程序运行期间最严重的问题,程序的功能是不完整的。大多数错误与程序员的执行操作无关,而是代码运行时JVM出现的错误。比如,Java虚拟机运行错误(VirtualMachineError),当JVM的内存资源被占用完时就会抛出OutOfMemoryError,而这样的错误出现时,JVM会选择终止线程。
Exception: 是程序本身可以处理的异常。
Exception类有一个非常重要的子类RunTimeException,RunTimeException及其子类表示“JVM常用操作”引发的错误。比如最常见的除数为0的异常、数组越界的异常以及试图使用空值对象的异常等,分别会引发AttrithmetricException、ArrayIndexOutOfBoundExceptioin和NullPointerException。
对于异常的描述就到这吧,不够用的话,百度一下吧!
在Java应用中,异常处理机制分为:抛出异常,捕捉异常
抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象个包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
对于运行时异常、错误或者可查异常,Java技术所需要的异常处理方式有所不同。
由于运行时异常的不可查行,为了更合理、更容易的实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常。
对于方法运行中可能出现的Error,当运行方法不欲捕捉时,Java允许该方法不做任何抛出声明。因为,大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕捉的异常。
对于所有的可查异常,Java规定:一个方法不许捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将异常抛出。
能够捕捉异常的方法,需要提供相符类型的异常处理器。所捕捉的异常,可能是由于自身语句所引发并抛出的异常,也可能是由某个调用的方法或者Java运行时系统等抛出的异常。也就是说,一个方法能捕捉的异常,一定是Java代码在某处抛出的异常。简单的理解,异常总是先抛出,后捕捉的。
任何Java代码都有可能抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。
从方法中抛出的任何异常都必须使用throws子句。
捕捉异常通过try…catch语句或者try…catch…finally语句实现
总体来说,Java规定,对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。
新闻热点
疑难解答