标签:无法 java异常处理 不同 期望 java异常 控制 就会 出现 用户
异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。
Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。Throwable又派生出Error类和Exception类。所有的异常类是从 Exception 类继承的子类。
错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,应该关注Exception为父类的分支下的各种异常类。
异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
根据java对异常的处理要求,可将异常类分为两类非检查异常和检查异常。非检查异常是Error 和 RuntimeException 以及他们的子类,这样的异常发生的原因多半是代码写的有问题,对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。检查异常是除了Error 和 RuntimeException的其它异常,java强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。
在编写代码处理异常时,对于检查异常,有2种不同的处理方式:使用try…catch…finally语句块处理它。或者,在函数签名中使用throws 声明交给函数调用者caller去解决。在使用try…catch…finally语句时有几点需要注意:
throws声明:如果一个方法内部的代码会抛出检查异常(checked exception),而方法自己又没有完全处理掉,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,否则编译不通过。
finally块不管异常是否发生,只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:System.exit()。因此finally块通常用来做资源释放操作:关闭文件,关闭数据库连接等等。需要注意的地方是:
Throw异常抛出语句,以通过throw语句手动显式的抛出一个异常。throw语句的后面必须是一个异常对象。throw 语句必须写在函数中,执行throw 语句的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别。
在自定义异常类时需要注意所有异常都必须是Throwable的子类,如果希望写一个检查性异常类,则需要继承 Exception 类,如果想写一个运行时异常类,那么需要继承 RuntimeException 类。只继承Exception 类来创建的异常类是检查性异常类。
标签:无法 java异常处理 不同 期望 java异常 控制 就会 出现 用户
原文地址:https://www.cnblogs.com/liujinxin123/p/9939565.html