一、try-catch-finally
(1)try-catch-finally概述
●finally:在异常处理时提供finally块来执行所有清除操作,比如说I0流中的释放资源
●特点:被finally控制的语句最终一 定会执行,除非JVM退出
●异常处理标准格式:try…catch…finally
try-catch-finally格式:
(2)try-catch-finally具体使用
运行正常时:
运行出现异常时:
优化:
面试题:
开发中不建议在这里加return,如果加了,返回的永远是这里的数据了,这样会出问题!
- try-catch-finally的作用
●finally代码块是 最终一定 要执行的,可以在代码执行完毕
的最后用于释放资源。
二、try-with- resource
(1)资源释放操作简化
finally虽然可以用于释放资源,但是释放资源的代码过于繁琐,可以简化
(2)注意
●JDK 7以及JDK 9的()中只能放置资源对象,否则报错
●什么是资源呢?
●资源都是实现了 Closeable/AutoCloseable接口的类对象
public abstract class InputStream implements Closeable {}
public abstract class OutputStream implements Closeable, Flushable{}
(3)JDK 7简化资源释放操作
/**
* 目标:学会使用Finally释放资源
*/
public class TryCatchResourceDemo {
public static void main(String[] args) throws FileNotFoundException {
try (
//这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
// 1、创建一个字节输入流管道与原视频接通
InputStream is = new FileInputStream("E:\\2022.7.16.mp4");
// 2、创建一个字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream("E:\\new.mp4");
//int age = 20;//是常量,不是资源对象,故报错
){
// 3、定义一个字节数组转移数据
byte[] buffer = new byte[1024];
int len;// 记录每次读取的字节数。
while ((len = is.read(buffer)) != -1){
os.write(buffer,0,len);
}
System.out.println("复制完成!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
(4)JDK 9简化资源释放操作
/**
* 目标:学会使用Finally释放资源
*/
public class TryCatchResourceDemo02 {
public static void main(String[] args) throws FileNotFoundException {
//这里面只能放置资源对象,用完会自动关闭:自动调用资源对象的close方法关闭资源(即使出现异常也会做关闭操作)
// 1、创建一个字节输入流管道与原视频接通
InputStream is = new FileInputStream("E:\\2022.7.16.mp4");
// 2、创建一个字节输出流管道与目标文件接通
OutputStream os = new FileOutputStream("E:\\new.mp4");
try (is;os){
// 3、定义一个字节数组转移数据
byte[] buffer = new byte[1024];
int len;// 记录每次读取的字节数。
while ((len = is.read(buffer)) != -1){
os.write(buffer,0,len);
}
System.out.println("复制完成!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}