Exception和Error有什么区别?
在Java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable类有两个重要的子类:
Exception:程序本身可以处理的异常,可以通过catch来进行捕获。Exception又可以分为Checked Exception(受检查异常,必须处理)和Unchecked Exception(不受检查异常,可以不处理)。
Error:程序无法处理的错误,我们没有办法通过catch来进行捕获不建议通过catch捕获。例如Java虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。
Checked Exception 和 Unchecked Exception有什么区别?
Checked Exception 即受检查异常,Java代码在编译过程中,如果受检查异常没有被catch或者throws关键字处理的话,就没办法通过编译。
比如下面这段IO操作的代码:
![](https://i-blog.csdnimg.cn/blog_migrate/74e4a6e6a04d2ad3d312a623dd43e11c.png)
除了RuntimeException及其子类以外,其他的Exception类及其子类都属于受检查异常。常见的受检查异常有:IO相关的异常、ClassNotFoundException、SQLException...。
Unchecked Exception即不受检查异常,Java代码在编译过程中,我们即使不处理不受检查异常也可以正常通过编译。
RuntimeException及其子类都统称为非受检查异常,常见的有(建议记下来,日常开发中会经常用到):
NullPointerException(空指针错误)
IllegalArgumentException(参数错误比如方法入参类型错误)
NumberFormatException(字符串转换为数字格式错误,IllegalArgumentException的子类)
ArrayIndexOutOfBoundsException(数组越界错误)
ClassCastException(类型转换错误)
AirthmeticException(算数错误)
SecurityException(安全错误比如权限不够)
UnsupportedOperationException(不支持的操作错误比如重复创建同一用户)
...
![](https://i-blog.csdnimg.cn/blog_migrate/262b59d06f34feb910ebb6e75523f8fe.png)
try with resource语句适用于什么场合?
JDK7之后,Java多了个新的语法:try-with-resources语句
可以理解为是一个声明一个或多个资源的try语句(用分号隔开),一个资源作为一个对象,并且这个资源必须要在执行完闭关的,try-with-resources语句确保在语句执行完毕后,每个资源都被自动关闭。任何实现了java.lang.AutoCloseable的对象,包括所有实现了java.io.Closeable的对象,都可以作一个资源。
开发场景以打开了外部资源居多:
文件
数据库链接
网络连接
final,finally,finalize的区别
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等,但是JVM不保证此方法总被调用。