ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### JAVA异常 * RuntimeException:如除零和数组越界; * Error:由Java运行时系统调用,如堆栈溢出; * Java中没有被捕获的异常,最终将交由系统默认处理程序进行处理; * 使用嵌套的try语句时,如果内层的没有匹配的catch,则检查外层的catch,直至检查完所有的try,由java运行时系统处理; * 每个try语句都必须有一条catch子句或finally子句; #### 异常处理的黄金法则--"早抛出后捕获" #### 类图 ![](https://img.kancloud.cn/ba/87/ba8726b94fcafdca5fd5b4c2295acd1c_693x450.png) #### 异常分类 Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受检异常,所有其他异常成为受检异常 ![](https://img.kancloud.cn/ea/1a/ea1a0b581f12a209e040114b7cbb9ab5_724x118.png) ##### JAVA受检异常 ![](https://img.kancloud.cn/18/3e/183e9be5edcb1b16aec80b1b800ae907_946x629.png) ##### JAVA非受检异常 ![](https://img.kancloud.cn/21/cc/21ccef366b5d6b03928ccb2f964ca021_946x307.png) #### JDK7的三个新异常特性 ![](https://img.kancloud.cn/da/7a/da7acfdddb8674cbac1dab8a3de7b3e3_946x154.png) #### 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"; } } ``` ![](https://img.kancloud.cn/92/ca/92ca101ec227e76ccd45ddfbcdac1002_715x91.png)