下面的try with resources语句是来自Java文档的示例
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
根据文件,
用资源尝试语句确保每个资源在语句末尾关闭。
我的问题是,为什么我需要在try关键字之后立即在括号内声明资源。(如上面的BuffereReader)
BufferReader实现了java。lang.AutoCloseable
所以为什么不支持这样的事情,
static String readFirstLineFromFile(String path) throws IOException {
try{
BufferedReader br =
new BufferedReader(new FileReader(path))
return br.readLine();
}
}
一旦退出尝试,就隐式关闭资源对象。(正如它所实现的自动关闭)
我只是有一个想法,为什么要改变语法。
请正确阅读问题,它只涉及语法。
因为它会改变现有程序的语义学。这个新特性需要一个新的语法。
在某些情况下,您不想立即关闭AutoCloseable
资源。例如:
static BufferedReader getBufferedReader(String path) {
try{
FileReader fr = new FileReader(path);
return new BufferedReader(fr);
}
catch(IOException ex) {
// handle somehow
}
}
在这种情况下,你不能关闭fr
当try
块退出时。否则返回的BufferedReader
将无效。因此,应显式指定何时关闭资源。这就是为什么发明了特殊的语法。
主要内容:Java SE 7:Try-With-Resources基础知识,Java SE 7:Try-With-Resources规则,Java SE 9:Try-With-Resources改进在这篇文章中,我们将讨论Java SE 9中的一些改进语句。现在让我们开始学习这个构造。 Java SE 7:Try-With-Resources基础知识 Java SE 7引入了一个新的构造: 语句,用于更好的异常处理。 如果没有这个构造,开发人员必须编写大量冗余和难看的代码。 如果开发人员忘记正确
问题内容: Java7的try-with-resources非常好,但是我无法绕开为什么需要在语句中包括资源声明的问题。我的直觉说以下应该是可能的: las,这会导致语法错误(含糊地期待a )。将类型定义/声明移动到语句中是可行的,这当然会将事物移动到相应的范围内。当我想从封闭中获得更多收益时,我可以弄清楚该如何解决,我对 为什么 编译器需要这样的东西很感兴趣。 问题答案: 您的版本未明确定义应关
本文向大家介绍如何在JDBC中使用try-with-resources?,包括了如何在JDBC中使用try-with-resources?的使用技巧和注意事项,需要的朋友参考一下 每当我们实例化并使用某些对象/资源时,都应显式关闭它们,否则有可能发生资源泄漏。 通常,我们使用finally资源使用close资源作为- 从JSE7开始,引入了try-with-resources语句。在这种情况下,我
问题内容: 声纳给出了一个错误,应该将其关闭。我需要修改以下代码才能使用。我该怎么做呢? 问题答案: 当前,代码尚不准备处理异常-您丢失了finally块来关闭打开的流。而且,当然,您是对的-使用try-with-resources解决了这个问题:
问题内容: 我读到try-with-resources 中的块是可选的。我试图在try-with- resources块中创建一个对象,没有后续块,只是从eclipse中获取编译器错误:“ 自动调用引发了未处理的异常类型。” 由于可以在try-with- resources中使用的每个资源都实现了,因此在调用该方法时可能会引发异常,因此我不明白该子句是可选的,因为它不允许我跳过从中捕获异常的过程。
问题内容: 我有一种使用JDBC从数据库中获取用户的方法: 我应该如何使用来改进此代码? 我已经尝试使用下面的代码,但是它使用了很多块,并且并没有太大地提高可读性。我应该以其他方式使用吗? 问题答案: 在你的示例中,无需进行外部尝试,因此你至少可以从3降为2,并且也不需要在资源列表的末尾关闭。使用两个try块的优点是所有代码都在前面显示,因此你不必引用单独的方法: