JAVA中的 try( ){ } ==== 》 try-with-resources 资源自动释放

前一阵子看到一个异常处理的结构,但是一直忘了发博客学习,今天看书又看到了这个异常处理、

try(    ){

}catch(){

}

类似于这个结构。

这种结构叫做try-with-resources.自动资源释放。

这种特性从JDK1.7开始存在的。

例如下列代码:

private static void customBufferStreamCopy(File source, File target) {

InputStream fis = null;

OutputStream fos = null;

try {

fis = new FileInputStream(source);

fos = new FileOutputStream(target);

byte[] buf = new byte[8192];

int i;

while ((i = fis.read(buf)) != -1) {

fos.write(buf, 0, i);

}

}

catch (Exception e) {

e.printStackTrace();

} finally {

close(fis);

close(fos);

}

}

private static void close(Closeable closable) {

if (closable != null) {

try {

closable.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

上述代码对于异常处理十分复杂,

对于资源的关闭也很麻烦,那么可以和下面的进行对比:

private static void customBufferStreamCopy(File source, File target) {

try (InputStream fis = new FileInputStream(source);

OutputStream fos = new FileOutputStream(target)){

byte[] buf = new byte[8192];

int i;

while ((i = fis.read(buf)) != -1) {

fos.write(buf, 0, i);

}

}

catch (Exception e) {

e.printStackTrace();

}

}

这段代码就用到了这种 try-with-resources 资源自动释放特性。

在try(    ) {   

 

}catch(){

}结束后资源也自动的关闭,释放掉了。就没有必要写出手动的关闭。

时间: 2024-10-12 15:58:22

JAVA中的 try( ){ } ==== 》 try-with-resources 资源自动释放的相关文章

java中HttpServletRequest常用获取url、资源名等方法总结

HttpServletRequest客户端获取请求,客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中.所以我们能够从对象中获取相应信息 端口 request.getServerPort() ; 获取服务器名称 request.getContextPath(); 获取工程名称 request.getContextPath(): 获取servlet路径 request.getServletPath().substring(0,request.getServletPat

[Java中实现国际化] - 配合thymeleaf实现中英文自动切换(多语言)

MOOC该链接第三章第二节 尚硅谷SpringBoot全集 web开发国际化 xjbo  (7天,过期可以留言索取) resources下建立文件 上到下为: 默认的,英语(美国),中文(中国) en login.btn=Sign In login.password=PassWord login.remember=Remember Me login.tip=Please sign in login.username=UserName zh login.btn=登录 login.password=

java中try{}catch{}和finally{}的执行顺序问题

 今天我给大家讲解一下java的的错误和异常处理机制以及相关异常的执行顺序问题.如有不足的地方,欢迎批评指正~ 1.首相简单介绍一下java中的错误(Error)和异常(Exception) 错误和异常的介绍: 在java.lang软件包中有一个java.lang.Throwable类,这个类是java中所有错误和异常的超类. 在java中错误和异常的继承主要有两个: 分别为Error和Exception 这两个. Error:         是java中所有错误类的父类,就是jvm出现错误,

Java中的软(弱)引用

一.Java中的强.软.弱.虚引用 在JDK中我们可以看到有一个java.lang.ref的包,这个包中就是Java中实现强.软.弱.虚引用的包,如下: PhantomReference 虚引用:如果一个对象持有虚引用,就和没有持有引用一样,在任何时候都可能被垃圾回收器回收.虚引用主要用来跟踪对象被垃圾回收的活动,虚引用还有一个和弱.软引用不同的地方是虚引用必须和引用队列联合使用.当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把这个虚引用加入到与之关联的引用队列中

浅谈Java中的System.gc()的工作原理

很多人把Java的“效率低下”归咎于不能自由管理内存,但我们也知道将内存管理封装起来的好处,这里就不赘述. Java中的内存分配是随着new一个新的对象来实现的,这个很简单,而且也还是有一些可以“改进”内存回收的机制的,其中最显眼的就是这个System.gc()函数. 乍一看这个函数似乎是可以进行垃圾回收的,可事实并不是那么简单.其实这个gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收.但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的

Eclipse中建立Maven项目后,Java Resources资源文件下没有src/main/java文件夹

当建立好一个Maven项目后,在Java Resources资源文件夹下没有看到src/main/java文件夹,然后手动去创建Source Folder时,提示该文件已存在,如图: 有一个解决办法:选择项目“test”右键-->Build Path-->Configure Build Path,选择Libraries-->JRE System Library-->Editor,然后选择Workspace default JRE. 最后就可以在Java Resources资源文件夹

Java中读取properties资源文件

一.通过ResourceBundle来读取.properties文件 /** * 通过java.util.resourceBundle来解析properties文件. * @param String path:properties文件的路径 * @param String key: 获取对应key的属性 * @return String:返回对应key的属性,失败时候为空. */ public static String getPropertyByName1(String path,String

java中各个类相互调用资源的原理

当我们要进行跨类的调用/使用的时候,比如当前类调用另一个类中的变量或方法时, 这时需要一定的条件,如果那些将要被调用的变量或方法是static(静态)变量,也叫类变 量,那么可以通过类名调用,相当于此时你有了使用那个类的权限,或者此时那个类中的 变量和方法这些资源对你开放了,可以简单的通过类名直接调用/使用;但是若那个类中没 有用static进行声明,默认是不对外使用的,只有那个类中的对象才可以调用/使用,也就 是说当前类没有权限使用那个类中的资源;这时只有先在本类中创建一个引用对象的变量 ,才

REST 在 Java 中的使用

REST是一种混合的架构风格,它的由来以及它的架构元素在笔者的前一篇文章<REST 架构风格的由来 & 元素>中已经描述了.本篇主要描述一下J2EE对REST的支持. Java是在J2EE6中引入了对REST的支持,即JSR-311(JAX-RS 1.1: The JavaTM API for RESTful Web Services),现在JAX-RS到2.0版本了,对应的是JSR-339,JSR是Java技术规范提案,由JCP组织进行管理.该规范使得使用Java进行开发的人员使用一