catch:后面对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块,可以有多个catch块
finally:主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件),异常机制总是保证finally块总是被执行。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者 throw等终止方法的语句,则就不会跳回执行,直接停止。
throws:用在方法签名中,用于声明该方法可能抛出的异常。
1.FileNotFoundException
//java7之前,在finally中关闭流,不能在try中关闭,因为一旦出现异常(找不到文件),不往下执行
public void finallyCloseResouce() {
FileInputStream InputStream = null;
try {
File file=new File( "./.txt");
InputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}finally {
if(null!=InputStream) {
try {
InputStream.close();
} catch (IOException e) {
}
}
}
}
jdk1.7后将FileInputStream InputStream = new FileInputStream(file)写在try()中,会 自动关闭流
public void autoCloseResouce() {
File file=new File( "./jdk1.7后提供的语法糖.txt");
try(FileInputStream InputStream = new FileInputStream(file)) {
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
2.NumberFormatException 数值转换异常
//数值转换异常:传入的不是字符串就会出现这个异常,比如传的是null或者“”
public void dothis()throws NumberFormatException {
Integer year=Integer.parseInt("~~~~455;lll"); //将字符串转化成Integer类型
System.out.println(year);
}
使用throws抛出异常
若代码出现异常,交由上级调用者来处理(web开发,一般都是在controller层中处理异常)
使用throws抛出异常的思路是:当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用使用throws声明抛出异常,该异常将交给JVM来处理。
JVM对异常的处理方法:打印异常跟踪栈的信息,并终止程序运行,所以有很多程序遇到异常后自动结束。
3.自定义异常
public void wrapException() throws MyException{
try {
} catch (NumberFormatException e) {
//自定义异常,最好将原本的异常栈信息也包括进去方便定位
throw new MyException("描述错误的信息",e);
}
}