【问题标题】:What is the 'defer' equivalent for JavaJava的“延迟”等价物是什么
【发布时间】:2015-04-22 05:16:45
【问题描述】:

这只是 Go 代码的一个简短示例:

package main

import "fmt"

func main() {
    defer fmt.Println("world") //use of keyword 'defer'

    fmt.Println("hello")
}

我在 Java 中找到了“defer”的等价物。

我可以使用'defer'而不是'defer'

try {
    //do something
} finally {
    //code using defer
}

不使用 try/catch/finally 有什么替代方法吗?

【问题讨论】:

  • 您要进行清理吗?
  • finally 有什么问题?
  • 是的清理就像关闭连接和释放内存..
  • 没有直接翻译,你怎么写go也不是你怎么写java。

标签: java go try-catch-finally


【解决方案1】:

Java 7 有一个try-with-resources statement

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

以下示例从文件中读取第一行。它使用一个 BufferedReader 实例从文件中读取数据。缓冲阅读器 是程序完成后必须关闭的资源 它:

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

在本例中,try-with-resources 中声明的资源 语句是一个 BufferedReader。声明声明出现 在 try 关键字之后的括号内。班上 BufferedReader,在 Java SE 7 及更高版本中,实现了接口 java.lang.AutoCloseable。因为 BufferedReader 实例是 在 try-with-resource 语句中声明,它将被关闭 不管try语句是正常完成还是突然完成 (由于 BufferedReader.readLine 方法抛出一个 IOException)。

【讨论】:

    【解决方案2】:

    在 java 7 及更高版本中,您可以使用 try-with-resource:

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

    当您退出尝试时,它将关闭资源 文档:link

    【讨论】:

      猜你喜欢
      • 2016-04-10
      • 2011-10-13
      • 2012-03-05
      • 2010-09-23
      • 2023-03-04
      • 2018-08-07
      • 2017-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多