java异常处理粘贴在这里的两种样式有什么区别?
第一个来自一本书,对我来说,它看起来非常神秘/复杂,第二个是我看到我周围的人写作的方式,包括我:),同样对于第一种风格,eclipse显示catch“IOException openx”块正在处理读写发生部分的异常,即java异常处理粘贴在这里的两种样式有什么区别?,java,exception,exception-handling,Java,Exception,Exception Handling,第一个来自一本书,对我来说,它看起来非常神秘/复杂,第二个是我看到我周围的人写作的方式,包括我:),同样对于第一种风格,eclipse显示catch“IOException openx”块正在处理读写发生部分的异常,即 while ((len = is.read(buf)) >= 0) out.write(buf, 0, len); .这是否意味着catch“IOException iox”是无用的代码 第一种风格 File file = new File("hsjdhsaj");
while ((len = is.read(buf)) >= 0)
out.write(buf, 0, len);
.这是否意味着catch“IOException iox”是无用的代码
第一种风格
File file = new File("hsjdhsaj");
InputStream is = null;
try {
URL url = new URL("");
is = url.openStream();
OutputStream out = new FileOutputStream(file);
try {
byte[] buf = new byte[4096];
int len;
while ((len = is.read(buf)) >= 0)
out.write(buf, 0, len);
} catch (IOException iox) {
} finally {
try {
out.close();
} catch (IOException closeOutx) {
}
}
} catch (FileNotFoundException fnfx) {
} catch (IOException openx) {
} finally {
try {
if (is != null)
is.close();
} catch (IOException closeInx) {
}
}
第二种风格
File file = new File("hsjdhsaj");
InputStream is = null;
OutputStream out = null;
try {
URL url = new URL("");
is = url.openStream();
out = new FileOutputStream(file);
byte[] buf = new byte[4096];
int len;
while ((len = is.read(buf)) >= 0)
out.write(buf, 0, len);
} catch (FileNotFoundException fnfx) {
} catch (IOException openx) {
} finally {
try {
if (out != null)
out.close();
if (is != null)
is.close();
} catch (IOException closeInx) {
}
}
如果我把
try {
if (is != null) is.close();
} catch (IOException closeInx) { }
try {
if (out != null) out.close();
} catch (IOException closeInx) { }
在第二个样式的finally block中,它们是否都相同?第二个样式的当
out时,is
未关闭。close()
引发异常。第一种样式没有这个问题
在这两个代码片段中,异常常常被默默地吞没。这可能会导致维护噩梦。有些东西不起作用,您也不知道原因。第二种样式的
is
在out时未关闭。close()
引发异常。第一种样式没有这个问题
在这两个代码片段中,异常常常被默默地吞没。这可能会导致维护噩梦。有些东西不起作用,你也不知道为什么。第一种方法更正确。如果在调用
out.close
时引发异常,则第二种方法会出现错误,因为您永远不会调用is.close()
当然,他们两个都很丑。您应该使用一种实用方法来关闭流。您不应该接受异常。第一种方法更正确。如果在调用
out.close
时引发异常,则第二种方法会出现错误,因为您永远不会调用is.close()
当然,他们两个都很丑。您应该使用一种实用方法来关闭流。你不应该接受异常。是的,第一个更正确,但也很难看。这就是为什么Java7改进了很多异常处理。在您的情况下,您可以使用尝试使用资源: 新语法允许您声明属于try块的资源。这意味着您提前定义了资源,并且运行时在执行try块后自动关闭这些资源(如果它们尚未关闭)
看看是的,第一个比较正确,但也很难看。这就是为什么Java7改进了很多异常处理。在您的情况下,您可以使用尝试使用资源: 新语法允许您声明属于try块的资源。这意味着您提前定义了资源,并且运行时在执行try块后自动关闭这些资源(如果它们尚未关闭)
查看注意:如果您正在使用Java SE 7,请查看新的自动资源管理功能:您需要详细了解Java异常处理,特别是finally、try和catch的含义。注意:如果您使用的是JavaSE7,请查看新的自动资源管理功能:您需要阅读Java异常处理,特别是finally、try和catch的含义。请注意,Guava也有一个实用方法,但他们不赞成它,因为“通过使做错事变得容易而鼓励误用”,请参阅yeah不应该吞下异常,这只是书中用来解释Java7的资源更新尝试(project coin)实用性的伪代码。第一个看起来很难看,有很多内部循环,第二个看起来很直截了当,我正在检查你共享的链接,谢谢,有什么解决办法?将此添加到
try{if(is!=null)is.close();}catch(IOException closeInx){}try{if(out!=null)out.close();}catch(IOException closeInx){}
block@lbalazscs因此,如果我们不应该使用实用程序类/方法,请注意,Guava也有一个closequity实用方法,但他们不赞成它,因为“容易做错事,从而鼓励误用”,请参阅yeah不应该吞下异常,这只是书中用来解释Java7的try with resources update(project coin)实用性的伪代码。第一个看起来很难看,有很多内部循环,第二个看起来很直截了当,我正在检查你共享的链接,谢谢,有什么解决办法?将此添加到try{if(is!=null)is.close();}catch(IOException closeInx){}try{if(out!=null)out.close();}catch(IOException closeInx){}
block@lbalazscs因此,如果我们不应该使用实用程序类/方法,我发布的第二种风格是否适用于更正?谢谢,我从我正在阅读的书中获得了关于参考资料的新尝试,但我对自己的糟糕知识感到非常惊讶,在我3年的编码生涯中,我从未想过第二种风格中潜伏的错误:(谢谢,我从我正在读的那本书中得到了关于参考资料的新尝试,但我对自己的糟糕知识感到非常惊讶,在我3年的编码生涯中,我从未考虑过第二种风格中潜伏的bug:(
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(
new URL("http://www.yoursimpledate.server/").openStream())))
{
String line = reader.readLine();
SimpleDateFormat format = new SimpleDateFormat("MM/DD/YY");
Date date = format.parse(line);
} catch (ParseException | IOException exception) {
// handle I/O problems.
}