一、try{}catch(){}
JAVA异常处理机制中的try-catch 语法: try{ 可能出现异常的代码片段 }catch(XXXException e){ 当try中出现XXXException后的解决办法 } try语句块不能独立存在,后面必须跟catch或finally。
补充:
Throwable->Error
Throwable->Exception->1)运行时异常
->2)非运行时异常
二、finally块
finally块 finally是异常处理机制中的最后一块,它可以直接跟在try语句块之后或最后一个catch之后。 finally语句块的特点是: 只要程序可以执行到try语句块中,无论是否出现异常,最终都要执行finally块的代码。 因此我们会将如释放资源等操作放在finally中确保执行,比如IO操作后的close()调用。
三、AutoCloseable接口
1.JDK7之后,java推出了自动关闭特性
使得我们在源代码中异常处理机制在IO应用中得到了简化
2.
只有实现了AutoCloseable接口的类才可以在这里定义并初始化。 并且编译器在编译时会将在这里定义的变量在finally中调用close将其关闭。 最终编译器会将当前代码改为如下的样子。
FileOutputStream fos = null;
try {
fos = new FileOutputStream("fos.dat",true);
fos.write(5);
} catch (IOException e) {
System.out.println("wrong");
} finally {
try {
if( fos != null ) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
四、throw/throws
1.异常的抛出
throw关键字可以主动对外抛出一个异常。
通常下列情况我们会主动抛出异常:
1):当前代码片段出现了异常,但是该异常不应当在当前代码片段被解决时,可以将其抛出
2):程序可以运行,但是不满足业务要求时可以对外抛出一个异常告知。(满足语法不满足业务)
2.须在方法上使用throws
java中除了RuntimeException之外的其他异常throw抛出是编译器要求,必须在方法上使用throws声明该异常的抛出通知调用者处理该异常。
3.
当我们调用一个含有throws声明异常抛出的方法时,编译器要求我们必须处理该异常 否则编译不通过. 处理手段有两种:
1).使用try-catch捕获其声明的异常
2).在当前方法上继续使用throws声明该异常的抛出.
五、RuntimeException
1.IllegalArgumentException不合法的参数异常
2.NullPointerException空指针异常
3.ArrayIndexOutOfBoundsException数组下标越界异常
4.ClassCastException类型转换异常
5.NubmerFormatException数值格式异常
六、异常常用的方法
1.printStackTrace()
该方法用来在控制台输出异常的堆栈信息,便于程序员debug
2. String getMessage() -----用于给用户提示或给程序做日志
获取错误信息,message一般用于给用户进行提示,或者记录log日志时使用
七、自定义异常(类名要见名知意)
1.通常使用自定义异常来表达业务错误
2.自定义异常应当做到以下几点:
1)类名要见名知意
2)需要继承Exception(直接或间接继承均可)
3)提供超类中所有的构造器
补充:
用throw抛出一个异常告知可以抛出自定义异常,当使用try-catch时显示的异常为自定义异常。