本文共 2063 字,大约阅读时间需要 6 分钟。
异常也是一种对象,java当中定义了许多异常类,并且定义了基类java.lang.Throwable作为所有异常的超类。Java语言设计者将异常划分为两类:Error和Exception。
Error
Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误。 应用程序不应该 抛出这种类型的对象。 如果出现了这样的内部错误, 除了通告给用户,并尽力使程序安全地终止外, 再也无能为力了。这种情况很少出现,这些错误是不可查的,非代码性错误。因此,当此类错误发生时,应用不应该去处理此类错误。
Exception
程序本身可以捕获并且可以处理的异常
Exception这种异常又分为两类:运行时异常和编译异常。
1、运行时异常(不受检异常):RuntimeException类极其子类表示JVM在运行期间可能出现的错误。比如说试图使用空值对象的引用(NullPointerException)、数组下标越界(ArrayIndexOutBoundException)。此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
2、编译异常(受检异常):Exception中除RuntimeException及其子类之外的异常。如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,否则编译不通过。在程序中,通常不会自定义该类异常,而是直接使用系统提供的异常类。
同时
可查异常与不可查异常:java的所有异常可以分为可查异常(checked exception)和不可查异常(unchecked exception)。
1、可查异常:编译器要求必须处理的异常。正确的程序在运行过程中,经常容易出现的、符合预期的异常情况。一旦发生此类异常,就必须采用某种方式进行处理。除RuntimeException及其子类外,其他的Exception异常都属于可查异常。编译器会检查此类异常,也就是说当编译器检查到应用中的某处可能会此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
2、不可查异常:编译器不会进行检查并且不要求必须处理的异常,也就说当程序中出现此类异常时,即使我们没有try-catch捕获它,也没有使用throws抛出该异常,编译也会正常通过。该类异常包括运行时异常(RuntimeException极其子类)和错误(Error)。
try--catch--finally
try { //可能产生的异常的代码区 }catch (ExceptionType1 e) { //捕获并处理try抛出异常类型为ExceptionType1的异常 }catch (ExceptionType2 e){ //捕获并处理try抛出异常类型为ExceptionType2的异常 }finally{ //无论是出现异常,finally块中的代码都将被执行 }
try代码块:用于捕获异常。其后可以接零个或者多个catch块。如果没有catch块,后必须跟finally块,来完成资源释放等操作,另外建议不要在finally中使用return,不用尝试通过catch来控制代码流程。
catch代码块:用于捕获异常,并在其中处理异常。
finally代码块:无论是否捕获异常,finally代码总会被执行。如果try代码块或者catch代码块中有return语句时,finally代码块将在方法返回前被执行(return后)。注意以下几种情况,finally代码块不会被执行:
1、 在前边的代码中使用System.exit()退出应用。
2、 程序所在的线程死亡或者cpu关闭
3、 如果在finally代码块中的操作又产生异常,则该finally代码块不能完全执行结束,同时该异常会覆盖前边抛出的异常。
public class Main { public static void main(String[] args) { int a = test(); System.out.println(a); } static int test() { int a = 3; try { Class aClass = Class.forName(""); a = 4; return a; } catch(Exception e) { e.printStackTrace(); a = 5; return a; } finally { a = 6; System.out.println(a); } }}
从代码的结果上来看,虽然catch处有return,但是finally依然执行了,但是返回的a的值是5,并不是6,因此可以印证,finally内的语句,是在return后执行的。
转载地址:https://blog.csdn.net/weixin_58104242/article/details/122540226 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!