异常处理
Error表示严重的错误,程序对此一般无能为力,例如:
OutOfMemoryError:内存耗尽NoClassDefFoundError:无法加载某个ClassStackOverflowError:栈溢出
而Exception则是运行时的错误,它可以被捕获并处理。
某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如:
NumberFormatException:数值类型的格式错误FileNotFoundException:未找到文件SocketException:读取网络失败
还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如:
NullPointerException:对某个null的对象调用方法或字段IndexOutOfBoundsException:数组索引越界
// 异常捕获语法格式try{// 可能会发生异常的代码}catch(异常类型 e){System.out.println(e); // 打印异常信息}try{// 可能会发生异常的代码}catch(Exception e){ // Exception万能捕获System.out.println(e); // 打印异常信息}// 可以用catch捕获多个// 需要注意的是多个catch语句只有一个能被执行,子类必须写在前面,不然不会被捕获try{// 可能会发生异常的代码}catch(异常类型 e){System.out.println(e); // 打印异常信息}catch(异常类型 e){System.out.println(e); // 打印异常信息}catch(异常类型 e){System.out.println(e); // 打印异常信息}catch(异常类型 e){System.out.println(e); // 打印异常信息}catch (IOException | NumberFormatException e) {// 如果两个异常的代码相同,我们可以用|把他们连接在一起System.out.println("Bad input");} finally {System.out.println("END");// 不论有没有错误都会执行,保证一些代码必须执行,有时可写可不写}
抛出异常
调用printStackTrace()可以打印异常的传播栈,对于调试非常有用;捕获异常并再次抛出新的异常时,应该持有原始异常信息;通常不要在finally中抛出异常。如果在finally中抛出异常,应该原始异常加入到原有异常中。调用方可通过Throwable.getSuppressed()获取所有添加的Suppressed Exception。
