JAVA异常
- RuntimeException:如除零和数组越界;
- Error:由Java运行时系统调用,如堆栈溢出;
- Java中没有被捕获的异常,最终将交由系统默认处理程序进行处理;
- 使用嵌套的try语句时,如果内层的没有匹配的catch,则检查外层的catch,直至检查完所有的try,由java运行时系统处理;
- 每个try语句都必须有一条catch子句或finally子句;
异常处理的黄金法则--"早抛出后捕获"
类图

异常分类
Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受检异常,所有其他异常成为受检异常
JAVA受检异常

JAVA非受检异常

JDK7的三个新异常特性

try-with-resources资源释放
语句中资源按照初始化的相反顺序关闭
try (Scanner scanner = new Scanner(Paths.get("")); PrintWriter writer = new PrintWriter("out.txt")) {
while (scanner.hasNext()) {
writer.write(scanner.nextLine());
}
}
// writer先关闭scanner后关闭
finally-return
finally子句中不应该包含return语句;如果try块中也有return语句,那么try块中的返回值会被finally子句中的返回值替换;
public static void main(String[] args) throws IOException {
System.err.println(get());
}
private static String get() {
try {
return "try";
} finally {
return "finally";
}
}
