精华内容
下载资源
问答
  • Java7提供了try-with-resources机制,其类似Python中的with语句,将实现了 java.lang.AutoCloseable 接口的资源定义在 try 后面小括号中,不管 try 块是正常结束还是异常结束,这个资源都会被自动关闭。...

    Java7提供了try-with-resources机制,其类似Python中的with语句,将实现了 java.lang.AutoCloseable 接口的资源定义在 try 后面的小括号中,不管 try 块是正常结束还是异常结束,这个资源都会被自动关闭。 try 小括号里面的部分称为 try-with-resources 块。

    使用try-with-resources机制的代码如下所示:

    static String readFirstLineFromFile(String path) throws IOException {
    	try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    		return br.readLine();
    	}
    }

    在Java7之前,只能使用下面的语句关闭资源:

    static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
    	BufferedReader br = new BufferedReader(new FileReader(path));
    	try {
    		return br.readLine();
    	} finally {
    		if (br != null)
    			br.close();
    	}
    }

    readFirstLineFromFile 方法中,如果 try 块和 try-with-resources 块都抛出了异常,则抛出 try 块中的异常, try-with-resources 块中的异常被忽略; readFirstLineFromFileWithFinallyBlock 方法中,如果方法 readLine 和 close 都抛出了异常,则抛出 finally 块中的异常, try 块抛出的异常被忽略。

    参考资料:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html 

    展开全文
  • javatry后面括号

    千次阅读 2020-07-01 14:25:05
    如题,在工作中遇见了在try...catch语句的try后面括号,不懂,查资料明白之后,特此记录. 下面是一段很简单的从文件读取文本的输入流: package com.springcloud.server.springserver; import java.io.*; public ...

    如题,在工作中遇见了在try...catch语句的try后面加括号,不懂,查资料明白之后,特此记录.

    下面是一段很简单的从文件读取文本的输入流:

    package com.springcloud.server.springserver;
    
    import java.io.*;
    
    public class TryTest {
        public static void main(String[] args) {
            File file = new File("E:\\springcloud\\spring-eureka\\src\\main\\resources\\a.txt");
            InputStream inputStream = null;
            try {
                inputStream  = new FileInputStream(file);
                byte b[] = new byte[1024];
                int len = 0;
                int temp=0;          //所有读取的内容都使用temp接收
                while((temp=inputStream.read())!=-1){    //当没有读取完时,继续读取
                    b[len]=(byte)temp;
                    len++;
                }
                System.out.println(new String(b,0,len));
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    有一定java功底的人一眼就看的明白,非常简单.

    但是,在java1.7的版本中,我们还有另外一种写法来关闭这个inputstream,也就是在try后面加括号,代码如下:

    package com.springcloud.server.springserver;
    
    import java.io.*;
    
    public class TryTest {
        public static void main(String[] args) {
            File file = new File("E:\\springcloud\\spring-eureka\\src\\main\\resources\\a.txt");
    
            try (InputStream inputStream = new FileInputStream(file)){
                byte b[] = new byte[1024];
                int len = 0;
                int temp=0;          //所有读取的内容都使用temp接收
                while((temp=inputStream.read())!=-1){    //当没有读取完时,继续读取
                    b[len]=(byte)temp;
                    len++;
                }
                System.out.println(new String(b,0,len));
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    

    为了验证,我们在FileInputStream的close方法处打上断点,并且以debug的方式启动上面的方法:

    启动,发现我们没有显示的写close(),程序还是进入了close()方法:

    由此可知,在try后面写的内容是可以自动帮我进行close()的.

    总结:

    从java1.7版本开始,支持使用try后面跟随()括号管理释放资源,前提是这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。

    展开全文
  • java try后面括号的作用

    千次阅读 多人点赞 2018-03-07 16:49:28
    Java7新特性,支持使用try后面跟随()括号管理释放资源例如通常使用try代码块 1 try { 2 fis = new FileInputStream(source); 3 fos = new FileOutputStream(target); 4 5 byte[] buf = new byte[8192]; 6 ....

    Java7新特性,支持使用try后面跟随()括号管理释放资源

    例如通常使用try代码块

    复制代码
     1     try {
     2         fis = new FileInputStream(source);
     3         fos = new FileOutputStream(target);
     4   
     5         byte[] buf = new byte[8192];
     6   
     7         int i;
     8         while ((i = fis.read(buf)) != -1) {
     9             fos.write(buf, 0, i);
    10         }
    11     }
    12     catch (Exception e) {
    13         e.printStackTrace();
    14     } finally {
    15         close(fis);
    16         close(fos);
    17     }
    复制代码

     使用Java7新特性

    复制代码
     1     try (
     2         InputStream fis = new FileInputStream(source);
     3         OutputStream fos = new FileOutputStream(target)){
     4   
     5         byte[] buf = new byte[8192];
     6   
     7         int i;
     8         while ((i = fis.read(buf)) != -1) {
     9             fos.write(buf, 0, i);
    10         }
    11     }
    12     catch (Exception e) {
    13         e.printStackTrace();
    14     }
    复制代码

    try括号内的资源会在try语句结束后自动释放,前提是这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。

    展开全文
  • Java 7 新特性try-with-resources语句

    千次阅读 2017-07-04 22:10:41
    1、什么是try-with-resources语句 try-with-resources 语句是一个声明一个或多个资源的 try 语句。一个资源作为一个对象,必须在...任何实现了 Java.lang.AutoCloseable 接口的对象,包括所有实现了 java.io.Closeable

    1、什么是try-with-resources语句

           try-with-resources 语句是一个声明一个或多个资源的 try 语句。一个资源作为一个对象,必须在程序结束之后随之关闭。 try-with-resources 语句确保在语句的最后每个资源都被关闭 。任何实现了 Java.lang.AutoCloseable 接口的对象,包括所有实现了 java.io.Closeable 的对象,都可以用作一个资源。

    2、举个栗子

           下面的例子读取文件的第一行。它使用了 BufferedReader 的一个实例来读取文件中的数据。BufferedReader 是一个资源,它必须在程序结束之后随之关闭:

    static String readFirstLineFromFile(String path) throws IOException {
       try (BufferedReader br = new BufferedReader(new FileReader(path))) {
            return br.readLine();
          }
    }

           在这个例子中, try-with-resources 语句声明的资源是一个 BufferedReader。声明语句在紧跟在 try 关键字的括号里面。Java SE 7以及后续版本中,BufferedReader类实现了java.lang.AutoCloseable接口。 因为 BufferedReader 实例是在 try-with-resource 语句中声明的, 所以不管 try 语句正常地完成或是 发生意外 (结果就是 BufferedReader.readLine 方法抛出IOException),BufferedReader都将会关闭。

          在 Java SE 7之前, 可以使用 finally 块来确保资源被关闭,不管 try 语句正常地完成或是发生意外。下面的例子使用 finally 块替换 try-with-resources 语句:

    static String readFirstLineFromFileWithFinallyBlock(String path) 
          throws IOException {
    
          BufferedReader br = new BufferedReader(new FileReader(path));
          try {
            return br.readLine();
          } finally {
            if (br != null) br.close();
          }
      }

           然而,在这个例子中,如果 readLine 和 close 方法均抛出异常,那么 readFirstLineFrom FileWithFinallyBlock 方法将抛出从 finally 块中抛出的异常; try 块中抛出的异常被抑制了。与此相反, 在 readFirstLineFromFile 这个例子中, 如果 try 块和 try-with-resources 语句均抛出异常, 那么 readFirstLineFromFile 将抛出从 try 块中抛出的异常; try-with-resources 块抛出的异常被抑制了。在java SE 7 以及后续的版本中, 你可以检索被抑制的异常;详情参见 Suppressed Exceptions

          可以在一个 try-with-resources 语句中声明一个或多个资源。下面的例子检索zip文件 zipFileName 中所有文件的名称并创建一个包含那些文件名称的文本文件:

    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);
    
    // Open zip file and create output file with try-with-resources statement
    
    try (
         java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName);
         java.io.BufferedWriter writer =    
               java.nio.file.Files.newBufferedWriter(outputFilePath, charset)
        ) {
    
     // Enumerate each entry
    
        for (java.util.Enumeration entries = zf.entries();      
             entries.hasMoreElements();) 
         {
            // Get the entry name and write it to the output file
            String newLine = System.getProperty("line.separator");
    
          String zipEntryName =((java.util.zip.ZipEntry) entries.nextElement()).getName() + newLine;
    
              writer.write(zipEntryName, 0, zipEntryName.length());
        }
      }
     }

           在这个例子中, try-with-resources 语句包含两个由分号隔开的声明: ZipFileBufferedWriter。当代码块直接伴随着它正常地或由于一个异常终止时, BufferedWriterZipFile 对象的 close 方法以这种顺序自动地调用 。

    注意:资源的 close 方法调用顺序与它们的创建顺序相反。



    下面的例子使用一个 try-with-resources 语句来自动关闭一个 java.sql.Statement 对象:

      public static void viewTable(Connection con) throws SQLException {
    
        String query = "select COF_NAME, SUP_ID, PRICE, SALES, TOTAL from COFFEES";
    
        try (Statement stmt = con.createStatement()) {
    
        ResultSet rs = stmt.executeQuery(query);
    
        while (rs.next()) {
              String coffeeName = rs.getString("COF_NAME");
              int supplierID = rs.getInt("SUP_ID");
              float price = rs.getFloat("PRICE");
              int sales = rs.getInt("SALES");
              int total = rs.getInt("TOTAL");
              System.out.println(coffeeName + ", " + supplierID + ", " + price +
                               ", " + sales + ", " + total);
        }
    
       } catch (SQLException e) {
            JDBCTutorialUtilities.printSQLException(e);
       }
    }

    这个例子中使用的 java.sql.Statement 这个资源是JDBC 4.1以及后续版本API的一部分。

    注意: 一个 try-with-resources 语句可以像普通的 try 语句那样有 catch 和 finally 块。在try-with-resources 语句中, 任意的 catch 或者 finally 块都是在声明的资源被关闭以后才运行。

    3、被抑制的异常

           与 try-with-resources 语句关联的代码块可能会抛出异常。在 writeToFileZipFileContents这个例子中, 当试图关闭 ZipFileBufferedWriter 对象时,try 块可能会抛出一个异常,并且 try-with-resources 语句可能抛出多达两个异常 。如果 try 块抛出异常并且 try-with-resources 语句抛出一个或多个异常,那么从 try-with-resources 语句中抛出的异常将会被抑制, 并且块抛出的异常是由 writeToFileZipFileContents 方法抛出的那一个。你可以通过调用由 try块抛出的异常的Throwable.getSuppressed 方法检索这些被抑制的异常信息。

    4、实现了AutoCloseable 或 Closeable 接口的类

          参见 AutoCloseableCloseable 接口的Javadoc可以看到实现了两者当中的任何一个接口的类集。Closeable 接口继承了 AutoCloseable 接口。 Closeable接口的 close 方法抛出IOException 类型的异常而 AutoCloseable 接口的 close 方法抛出 Exception 类型的异常。因此, AutoCloseable 接口的子类可以重写 close 方法的这个行为来抛出指定的异常,例如 IOException,或者没有异常。




    对机器学习,人工智能感兴趣的小伙伴,请关注我的公众号:

    这里写图片描述



    参考文献:

    1. http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html
    展开全文
  • Java的异常处理机制 Java通过面向对象的方式对异常进行处理,Java把异常按照不同的类型进行分类,并提供了良好的接口。在Java中,每个异常都是一个Throwable对象。...try关键字后紧跟一个花括号括起来...
  • Javatry和catch的故事

    2017-04-05 20:51:31
    try保护的语句声明必须在一个大括号之内(也就是说,它们必须在一个块中)。你不能单独使用try。 2. 例外是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发
  • 前言这次的米饭不太冷,前几篇文章聊了聊java的异常体系,就想起来了java7中新增加的try-with-resources语句,其实我也不熟悉,大家一起来看看吧介绍try-with-resources语句是声明一个或多个资源的try语句try-with-...
  • 那可能零基础学编程的伙伴就会头疼了,网上关于 Java 的大部分技术文章都不够幽默,不够风趣,不够系列,急需要一份能看得进去的学习手册,那我觉得我肝的这份手册正好符合要求,并且会一直持续更新下去。...
  • java异常处理之try...catch...finally详解

    千次阅读 2017-07-17 22:11:51
    一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try…catch…finally的一个总结。一.java继承体系 Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系。如图:...
  • java7用法之try-with-resources

    千次阅读 2019-07-04 00:23:08
    因为这个工具会出现扫描误报情况,比如try-with-resources用法对应代码没有finally语句块,结果是处处报standard:unsafe code …漏洞问题,意思是:未使用finally语句块释放资源,可能使系统出现资源不...
  • Java之异常

    2021-09-26 19:07:30
    Java将异常分为两种,checked异常和Runtine异常。Java认为checked异常都是可以在编译阶段...Java的异常机制主要依赖于try,catch,finally,throws和throw这几个关键字,try后面紧跟着一个花括号括起来的代码块且花括号
  • Java

    2019-11-17 16:08:26
    关键字后面紧跟类名,类名以大写开头 源码的文件名必须与公共类的名字相同,要注意大java解释器运行java代码时将其编译成.class结尾的字节码,javac psvm:入口函数 java的main外面必须有个壳 void:没有返回值...
  • 感谢原文链接:...当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约...
  • java异常~全了

    2021-08-29 16:16:15
    异常 即使再的帆也能远航~ 一....异常的概念 异常体系 ...Java的异常机制主要依赖于try、catch、finally、throw和throws五个关键字其中try关键字后面紧跟着一个花括号括起来的代码块,它里面放置可能会引
  • java

    千次阅读 2017-08-29 01:05:41
    Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法。 1、一个".java"源文件中是否可以包括多个类(不是...
  • Java编程思想笔记2

    2015-10-30 11:48:45
    注意:①java包的命名规则全部使用小写字母,包括中间的字也是如此。  ②package语句必须是文件中的第一行非注释程序代码。 假设你编写一个Stack类并安装到了一台机器上,而该机器上已经有了一个别人编写的 Stack...
  • 写给大忙人看的 Java 基础知识

    千次阅读 2020-04-07 16:21:40
    众所周知,Java 是一门面向对象的编程语言。它最牛逼的地方就在于它是跨平台的,你可以在 Windows 操作系统上编写 Java 源代码,然后在 Linux 操作系统上执行编译后的字节码,而无需对源代码做任何的修改。 01、数据...
  • Google Java编程风格指南

    千次阅读 2015-11-13 10:08:54
    作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行...目录前言源文件基础源文件结构格式命名约定编程实践Javadoc后记前言这份文档是Google Java编程风格规范的完整定
  • java 面试

    2009-03-10 20:05:25
    java"]JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一...
  • 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合Google的Java编程风格。 与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题...
  • java语言手册

    千次阅读 2009-09-12 08:42:00
    /*************************************************function:java language Technologyauthor :chinayaosir QQ:44633197 blog :http://blog.csdn.net/chinayaosirnote  :禁止其它网站转载此文章****************...
  • 深入理解Java虚拟机--类文件结构

    万次阅读 2017-05-18 00:20:40
    目录 Class类文件的结构 魔数与Class文件的版本 常量池 访问标志 类索引、 父类索引与接口索引集合 字段表集合 方法表集合 ...参考书籍:《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》 ...
  • Java正则表达式例子

    2009-09-24 21:55:28
    java"] public class RegexHarnessTest { public static void main(String args[]) { String[] regex = {"([\u4E00-\u9FA5]+,?)+", "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}...
  • Java异常处理

    2018-11-12 20:28:50
     Java的异常机制主要依赖于try,catch,finally,throw和throws五个关键字,其中try关键字后紧跟一个花括号(不可省略),简称try块,它里面放置可能引发异常的代码。catch后对应异常类型和一个代码块,用于表明该...
  • Java正则表达式教程

    千次阅读 2011-12-09 14:13:02
    正则表达式善于处理文本,对匹配、搜索和替换等操作都有意想不到的作用。正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率。  正则表达式应用于程序... Java
  • 原文引自:http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/text/DecimalFormat.html java.text  类 DecimalFormat java.lang.Object java.text.Format java.text.NumberFormat

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,181
精华内容 1,672
关键字:

javatry后面紧跟小括号

java 订阅