java学习-7-捕获异常处理
Java使用异常来表示错误,并通过try ... catch
捕获异常;
1、Error错误是你的程序无能为力的,也无法捕获的,比如内存耗尽,最终会由JVM进行捕获打印出信息。几乎听天由命。但是老手程序员会遇见到做一些预见处理;
2、运行时错误RuntimeException的异常,如果不手动捕获最终也会交给JVM进行捕获处理,与手动捕获打印的信息差不多。所以最终在程序中呈现出来
3、要老命的CheckException异常,必须手动捕获or throw声明,IDE可以检查出,直接捕获处理即可
这种捕获后不处理的方式是非常不好的,即使真的什么也做不了,也要先把异常记录下来:
static byte[] toGBK(String s) {
try { return s.getBytes("GBK"); }
catch (UnsupportedEncodingException e)
{ // 先记下来再说:
e.printStackTrace();
}
return null;
}
在java中,all的可能抛出异常的语句。都可以try...catch捕获。把可能发生的一场的语句放在try{...}中,然后catch捕获对应的Excwption机器子类。
public static void main(String[] args) { try { process1(); process2(); process3(); } catch (IOException e) { System.out.println(e); } catch (NumberFormatException e) { System.out.println(e); }finally{ //finally
语句不是必须的,1、可写可不写;2、总是最后执行
System.out.println("END");
} }
存在多个catch
的时候,catch
的顺序非常重要:子类必须写在前面
如果没有发生异常,就正常执行try { ... }
语句块,然后执行finally
。如果发生了异常,就中断执行try { ... }
语句块,然后跳转执行匹配的catch
语句块,最后执行finally
。
可见,finally
是用来保证一些代码必须执行的。
如果方法声明了可能抛出的异常,那么就可以不写catch
。
public static void main(String[] args) { try { process1(); process2(); process3(); } catch (IOException | NumberFormatException e) { // IOException或NumberFormatException System.out.println("Bad input");//不同异常,相同处理,可以合并 } catch (Exception e) { System.out.println("Unknown error"); } }
感谢 https://www.liaoxuefeng.com/wiki/1252599548343744/1264738442933472