暑期JAVA学习(23)资源释放的方式
一、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(); } } }
上一篇:
通过多线程提高代码的执行效率例子