jdk7之后,引入了try-with-resources ,try-with-resources语句是一个声明一个或多个资源的try语句。一个资源作为一个对象,必须在程序结束之后关闭。try-with-resources语句确保在语句的最后每个资源都被关闭,任何实现了java.lang.AutoCloseable和java.io.Closeable的对象都可以使用try-with-resource来实现异常处理和关闭资源。
其实就是在try-catch-finally的简写,不用在finally里面写关闭的处理语句了,自动关闭。
优点:
1.代码精炼,在JDK1.7之前都有finally块,关闭、处理、回收资源,引入try-with-resource以后的版本只要资源类实现了AutoCloseable或Closeable程序在执行完try块后会自动close所使用的资源无论是否抛出异常。
2.代码更完全。在出现资源泄漏的程序中,很多情况是开发人员没有或者开发人员没有正确的关闭资源所导致的。JDK1.7之后采用try-with-resources的方式,则可以将资源关闭这种与业务实现没有很大直接关系的工作交给JVM完成。省去了部分开发中可能出现的代码风险。
异常抛出顺序
在JDK1.7之前如果try{}里面的语句与finally{}语句关闭资源时都抛出异常,
则只会抛出finally块中的异常,不会抛出try{}中的异常,这样经常会导致得到的异常信息不是调用程序想要得到的。
在JDK1.7及以后采用了try-with-resource机制,如果在try-with-resource声明中抛出异常(如文件无法打开或无法关闭)的同时try(){}大括号内语句也抛出异常,则只会抛出try(){}大括号内语句的异常。
try声明资源时,可以声明一个资源,也可以同时声明多个资源
- public class AboveJDK7_2 {
- public static void writeToFileZipFileContents(String zipFileName,String outputFileName)
- throws java.io.IOException {
- java.nio.charset.Charset charset = java.nio.charset.Charset.forName("US-ASCII");
- java.nio.file.Path outputFilePath = java.nio.file.Paths.get(outputFileName);
- //打开zip文件,创建输出流
- try (
- java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
- java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(
- outputFilePath, charset)
- )
- {//遍历文件写入txt
- XXXXXXXXXXXXXX
- }
- }
- }
- 注:上面的例子,无论正常执行还是有异常抛出,zf和write都会被执行close()方法,不过需要注意的是在JVM里调用的顺序是与生命的顺序相反。在JVM中调用的顺讯为:
writer.close();
zf.close();
所以在使用时一定要注意资源关闭的顺序。
catch多种异常并抛出新的异常
- try(xxxxxxx){
- //逻辑代码
- }catch (IOException | SQLException ex) {
- logger.log(ex);
- throw new SpecialException();
- }
相关推荐
public class TryWithResource { public static void main(String[] args) { try (BufferedInputStream bin = new BufferedInputStream(new FileInputStream(new File("test.txt"))); BufferedOutputStream bout ...
使用 try-with-resource 语法糖需要满足两个条件:第一,资源必须实现 AutoCloseable 接口,该接口的实现类需要重写 close 方法;第二,try 语句中的资源声明需要使用 try 语句的括号括起来。 例如,使用 try-with-...
如果一个类需要在使用完毕后进行清理工作,只需实现`AutoCloseable`接口,并在`close()`方法中执行清理操作,那么这个类就可以在`try-with-resources`语句中使用。 总的来说,JDK7的“try-with-resources”特性是...
在 Java SE 9 中,如果您已经拥有一个资源作为 final 或 effectively final 变量,可以直接使用该变量在 try-with-resources 语句中,而不需要声明新的变量。例如: // A final resource final Resource resource1 ...
要使自定义类能在try-with-resources中使用,只需让该类实现`AutoCloseable`接口,并覆盖`close()`方法。这样,系统就能在适当的时候自动调用`close()`。 ```java public class CustomResource implements ...
《Programming and Problem Solving with Java》是一本全面介绍Java编程语言及其应用的教材,不仅覆盖了Java的基本语法和核心概念,还深入探讨了面向对象编程、异常处理、多线程等高级主题。该书由三位资深计算机...
Java 7引入了Try-With-Resource语句,可以自动关闭资源,避免了finally中的代码。使用Try-With-Resource语句可以简化异常处理代码,提高代码的可读性和可维护性。 3. 使用Custom Exception 在Java中,可以自定义...
在 JDK 7 中引入的 try-with-resources 语句极大地简化了资源管理,特别是对于那些需要在使用后关闭的资源,如文件流、数据库连接等。然而,在早期版本中,如果要处理多个资源,代码可能会变得有些冗余。JDK 9 ...
* try-with-resource语句:包括try-with-resource的语法、Closeable和AutoCloseable接口等。 五、Java中的文件操作 * 文件操作的基本概念:包括文件的读取、写入、删除等操作。 * Java中的文件操作类:包括File类...
通过这个压缩包文件,学习者可以深入理解并掌握Java语言中try-with-resources的重要性和使用方法,这对于编写高效、健壮的Java程序至关重要。理解并善用try-with-resources不仅可以提升代码可读性和维护性,还能优化...
使用`getResource()`或`getResourceAsStream()`方法能更好地适应这些变化。 7. **异常处理**: - 在尝试读取文件时,应该始终处理可能出现的异常,如`FileNotFoundException`,确保程序在文件不存在或无法访问时...
异常捕获处理的方法通常有:try-catch、try-catch-finally、try-finally、try-with-resource。 1. try-catch:try-catch 捕获单个异常。 2. try-catch-finally:finally 关键字用来创建在 try 代码块后面执行的代码...
在`Resource.java`这个文件中,可能实现了上述的一种或多种方法来读取和操作属性文件。通过分析这个文件,我们可以学习到具体实现细节,包括错误处理、性能优化等方面的知识。 总之,Java读取properties属性文件是...
Redis分布式锁的try-with-resources实现 一、简介 在当今这个时代,单体应用(standalone)已经很少了,java提供的synchronized已经不能满足需求,大家自然 而然的想到了分布式锁。谈到分布式锁,比较流行的方法有3...
1. **自动资源管理(Automatic Resource Management, ARM)**:引入了try-with-resources语句,使得资源(如文件流或数据库连接)能够更方便且安全地关闭,减少了手动管理资源可能导致的错误。 2. **多路复用器...
从Java 9开始,`finalize`方法被标记为`@Deprecated`,推荐使用更可靠的资源管理方式,如try-with-resources或手动的关闭方法。 总的来说,final用于保证不变性,finally用于确保代码执行,而finalize则逐渐被淘汰...
因此,建议使用try-with-resources语句来确保资源的正确关闭: ```java try (InputStream in = url.openStream(); FileOutputStream out = new FileOutputStream("path/to/downloaded/file.html")) { byte[] ...
另一种更简洁的方式是使用Java 7引入的`try-with-resource`语句,它可以自动关闭实现了`AutoCloseable`接口的资源: ```java public void automaticallyCloseResource() { File file = new File("./tmp.txt"); ...
4. **资源管理**:在软件设计时,推荐采用资源自动管理的策略,比如在Java中使用try-with-resources语句,或者在Python中使用with关键字,确保资源在使用完毕后会被正确关闭。 5. **定期清理**:对于服务器上的临时...
7. **try-catch-finally**:finally通常是不能省略的,除非使用了`try-with-resource`。 **Java异常处理最佳实践** 1. 清理资源:使用finally或try-with-resource确保资源关闭。 2. 明确异常:优先捕获并处理最...