Java作为类语言有着和C相似的异常处理体系,而Java中异常都是派生于Throwable,其结构如下图
- Error 是错误
- 栈内存溢出错误
- 堆内存溢出错误
Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误。 应用程序不应该抛出这种类型的对象。 如果出现了这样的内部错误, 除了通告给用户,并尽力使程序安全地终止之外, 再也无能为力了
- Exception
- RuntimeException(非受查异常):如果出现一定是你的问题
- 错误的类型转换
- 数组访问越界
- 访问null
- IOException(受查异常)
- 文件尾部后面读取数据
- 试图打开一个不存在的文件
- 试图根据给定字符串查找Class对象
- RuntimeException(非受查异常):如果出现一定是你的问题
IOException,编译器会要求我们try catch 或throws处理,本质是客观因素造成的问题
实例try-catch-finally的执行过程
finally 里的return n 是注掉的
此时输出为:
执行了
3
小结:Class.forName(“”)会抛出异常,不执行下面语句跳转到catch代码块中,最后执行finally, 而finally 是在return返回值前执行的
实例-2
还是上图,但是把finally中的return打开
输出结果为:
执行了
4
小结:简单的记住,有finally 以finally中的return 为最终返回值
总结
当类中方法有try finally 时,在底层调用方法时,return 要等到try-finally整体执行结束才返回数据并杀死方法。