【问题标题】:Special syntax of java try catch blockjava try catch 块的特殊语法
【发布时间】:2012-03-06 10:43:18
【问题描述】:
Charset charset = Charset.forName("US-ASCII");
try (BufferedReader reader = Files.newBufferedReader(file, charset)) {
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException x) {
    System.err.format("IOException: %s%n", x);
}

我在The Java Tutorials 上看到了这样一段代码,其中括号语句位于关键字“try”之后。这是有效的吗?为什么eclipse不能识别并报语法错误?

【问题讨论】:

  • (我想知道为什么他们有那个多余的任务。)

标签: java try-catch


【解决方案1】:

这是 Java 7 的 try with resource 功能。

您需要将 Eclipse 的 Compiler Compliance 级别设置为 1.7 才能识别语法。

您可以在Window > Preferences > Java > Compiler 下全局设置它,也可以简单地右键单击项目并如下所示:

【讨论】:

  • OP 说:“为什么 Eclipse 不能识别它并报告语法错误?” - 他的 Eclipse 识别这种语法,它已经在 1.7 JDK 中工作了......
  • 再问:我在Eclipse中安装了JRE1.7(通过Windows-Preference-Java-Installed JRE)并且能够导入相关的包。但我在执行环境中找不到 1.7,也无法将编译器合规级别设置为 1.7。为什么?
  • @user796857 因为您需要的是 JDK,而不是 JRE。
【解决方案2】:

Eclipse 清楚地指出了为什么这是无效的语法:

将项目编译器合规性设置设置为 1.7

将项目 JRE 构建路径条目设置为“JavaSE-1.7”

也就是说,你已经安装了 Java 6,但是教程

(...) 主要描述 Java SE 7 中的功能。

http://docs.oracle.com/javase/tutorial/index.html

【讨论】:

    【解决方案3】:

    这是Java 7中引入的try-with-resource语法。它是supported by Eclise,这就是它没有报告任何错误的原因:

    顺便说一句,您的代码还使用了 Java 7 中引入的 Files

    【讨论】:

      【解决方案4】:

      不,它无效。试试这个:

      Charset charset = Charset.forName("US-ASCII");
      try {
          BufferedReader reader = Files.newBufferedReader(file, charset);
          String line = null;
          while ((line = reader.readLine()) != null) {
              System.out.println(line);
          }
      } catch (IOException x) {
          System.err.format("IOException: %s%n", x);
      }
      

      【讨论】:

      • 这个问题没有被标记为“java 7”,所以这个答案是正确的,因为(合理的)假设我们在 java 6 土地上
      • 同意,但看起来 OP 根本不知道 Java 7 的存在和功能。 BTW Java 6 计划于今年 11 月结束生命周期:oracle.com/technetwork/java/eol-135779.html
      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      相关资源
      最近更新 更多