【发布时间】:2016-08-24 08:41:59
【问题描述】:
在很长一段时间后,我重新开始用 Java 编写代码 - 过去几年我的大部分编码工作都是在 PHP 和 JavaScript 中完成的 - 我发现我必须更加努力才能满足 Java 编译器的要求,这是对变量范围和异常处理等问题更加严格。一段给我带来麻烦的代码如下所示
File file = new File(path, fname);
FileOutputStream stream = null;
try
{
stream = new FileOutputStream(file);
stream.write(tosave.getBytes());
}
finally
{
try
{
if (null != stream) {stream.close();}
return true;
}
catch(Exception e){return false;}
}
这被编译器接受。然而,在我来到这里之前,我遇到了几个问题。
- 第一次尝试:没有 Catch Block。编译器拒绝玩球,因为它希望我处理无法创建 FileOutputStream 的可能性。同上写入该流。我理解这种推理背后的逻辑并喜欢它。
-
第二次尝试:Catch Block 但是...:我在
try块内声明并创建了stream变量。编译器再次出现问题 -stream变量超出了finally块的范围。
如您所见,我通过在 try 块上方声明 stream 并将其初始化为 null 来解决此问题。
这行得通。然而,考虑到我的 Java 技能有多生疏,我想我会问:有没有正确的方法来编写这样的代码?
【问题讨论】:
-
您可以在 Java 7 及更高版本的资源中使用 try ......只是一些糖,更少的代码
标签: java exception-handling scope visibility