1. 常见的Exception有哪些
IOException(文件读写)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
ClassCastException(类转换异常)
SQLException
java.lang.IndexOutOfBoundsException:索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常
java.lang.StringIndexOutOfBoundsException:字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。
2. Error 和 Exception 区别是什么?
Error指程序崩溃无法继续执行,无法自行修复。如:系统崩溃,内存不足,堆栈溢出
Exception指程序捕获并处理,遇到这种错误处理后程序可以继续执行下去
3. JVM 是如何处理异常的?
在一个方法中如果发生异常,这个方法会创建一个异常对象,并转交给 JVM,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并转交给 JVM 的过程称为抛出异常。可能有一系列的方法调用,最终才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。
JVM 会顺着调用栈去查找看是否有可以处理异常的代码,如果有,则调用异常处理代码。当 JVM 发现可以处理异常的代码时,会把发生的异常传递给它。如果 JVM 没有找到可以处理该异常的代码块,JVM 就会将该异常转交给默认的异常处理器(默认处理器为 JVM 的一部分),默认异常处理器打印出异常信息并终止应用程序。
4. throw 和 throws 的区别是什么
throw用在方法内部,只能抛一个
throws用在方法声明中,可以抛多个
5. finally的用法
不管程序是不是抛异常,最终都会执行,一般用于关闭一些资源的代码
6. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗
会在return执行前执行finally的代码