JAVA 异常处理
异常处理
异常
不正常,我们在代码的时候出现的编译或者运行时的错误
异常包含了错误的类型、原因以及位置
异常的体系结构:

Error:出现的不能够处理的严重问题(电脑烂了)
Exception:可以处理的问题(小电影看多了电脑卡)
异常处理
jvm处理异常的方式:
如果出现异常我们没有处理,jvm会帮我们进行处理,并把异常的类型,原因还有位置显示在命令行
还要终止程序,异常后面的代码将不再运行
异常的处理方式:
捕获处理: try ... catch语句 (IDEA 快捷键 CTRL + ALT + T)
try{ 有可能出现问题的代码; }catch(异常对象){ 处理异常; }
try .. catch 执行顺序:
1、try 如果发现异常,异常下面的代码不在执行
2、直接进入catch语句中
3、catch语句结束后,整个try。。。catch语句结束
4、如果没有发现异常, try 语句执行后不在执行 catch 语句
抛出异常:当我们不想处理异常,或者没有能力处理的时候,可以选择抛出异常。
谁调用方法,谁处理异常
使用关键字 throws 在方法的声明时抛出异常
private static void method2() throws IOException { FileWriter fw = new FileWriter("a.txt"); }
多个异常处理
public static void main(String[] args) { try{ String s = null; System.out.println(s.length()); int[] arr = new int[5]; System.out.println(arr[8]); }catch (NullPointerException e) { System.out.println("NullPointerException"); }catch (ArrayIndexOutOfBoundsException e){ System.out.println("ArrayIndexOutOfBoundsException"); } }
多个catch的运行顺序:
多个catch之间可以有子父类
平级之间没有顺序
如果有子父类,父类异常必须放在后面
Throwable常用的方法
String getMessage() 返回此 throwable 的详细消息字符串 原因 String toString() 返回此 throwable 的简短描述 类型和原因 void printStackTrace() 打印异常的堆栈的跟踪信息 类型原因和位置
Finally
finally使用格式: try{ 有可能出现问题的代码; }catch(异常类型 异常变量){ 异常处理; }finally{ //释放资源的代码 //收尾工作,无论try..catch 语句如何执行,fianlly 一定会执行 }
Finally 使用
public static void main(String[] args) { FileWriter fw = null; try { System.out.println(2 / 0); fw = new FileWriter("a.txt"); fw.write("hello"); fw.write("world"); fw.write("java"); } catch (IOException e) { e.printStackTrace(); } finally { //释放资源 try { if(fw != null) { fw.close(); } } catch (IOException e) { e.printStackTrace(); } } }
异常的分类
运行时期异常:RuntimeException的子类就是运行时期异常,在编译时期可以自由选择处理或者不处理
编译时期异常:是Exception的子类,非RuntimeExcpetion的子类,在编译时期必须处理
浙公网安备 33010602011771号