Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java异常处理粘贴在这里的两种样式有什么区别?_Java_Exception_Exception Handling - Fatal编程技术网

java异常处理粘贴在这里的两种样式有什么区别?

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");

第一个来自一本书,对我来说,它看起来非常神秘/复杂,第二个是我看到我周围的人写作的方式,包括我:),同样对于第一种风格,eclipse显示catch“IOException openx”块正在处理读写发生部分的异常,即

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.
   }