在java中尝试catch的最佳选择

时间:2011-08-16 14:09:27

标签: java performance try-catch

我有一个包含要打开和解析的文件列表的向量,我想知道在我的情况下做什么是最好的选择。

这就是我开始做的事情:

for (int i =0 ; i< files.size() ; i++)
{
    System.out.println("n°" + i + " : " + files.elementAt(i));
    try
    {
        // open the files
    }
    catch (Exception e) {
    // TODO: handle exception
    }   
}

或者你对这个怎么看?

try
{
    for (int i =0 ; i< files.size() ; i++)
    {
        System.out.println("n°" + i + " : " + files.elementAt(i)); 
        // open the files       
    }
}
catch (Exception e) {
    // TODO: handle exception
}

由于

EDIT:

My purpose is that, when I try to open a file that doesn't exist I must throw something or maybe write the exception in a log file and continu opening the other files.

->所以我认为第一个解决方案是我的最佳解决方案?

8 个答案:

答案 0 :(得分:3)

我会选择第一个 - 例如,如果文件7已损坏,您仍然可以从8-10(或其他)获取数据。即使他们都腐败了,你也不会失去任何东西。

我想这将归结为您的应用程序应该如何工作。如果一个文件出错将使整个过程停止,第二个更合适,但通常我发现第一个文件更有用。

答案 1 :(得分:2)

我认为第一个更好,它的优点是如果一个文件中有异常,你仍然会解析其他文件。

根据你的编辑 - 第二个选项不合适,它会在抛出异常时退出循环。

答案 2 :(得分:0)

不一样!

在第一种情况下,如果捕获异常,则会有下一次迭代。在第二种情况下,如果您遇到异常,则没有下一次迭代!

答案 3 :(得分:0)

这一切都取决于你想要达到的目标。 如果您想尝试所有文件,您应该选择第一个选项。 如果你想在单个错误的情况下停止,那么秒是更好的选择。

答案 4 :(得分:0)

第二个将避免多次进入和离开try / catch的开销,但行为与第一个不同。如果您对一个文件有错误,第一种情况将允许仍然尝试其余文件;在第二种情况下,所有进一步的处理都结束了。

您使用哪种方法应完全基于您想要的这些行为。

答案 5 :(得分:0)

小心:那些不等同!如果其中一个文件失败,第一个表单(在循环体中使用try / catch)将允许处理其他文件,而第二个表单将放弃其他文件。

首先关注您需要的功能。

之后... try / catch会产生轻微的开销,所以第二种形式会更快一点,但是如果早期的文件失败,则会导致无法打开剩余文件的成本。

答案 6 :(得分:0)

这完全取决于你想做什么。当你在10号文件中排除故障时,这两种选择的行为完全不同。在第一个例子中,它将继续使用文件6,7,8 ......

在第二个例子中,它只会继续,直到文件失败,之后它就会放弃。如果你知道你想要的行为,你也知道选择哪一个。

答案 7 :(得分:0)

选项1:

这将尝试打开每个文件,即使一个(或多个)导致异常。

选项2:

如果任何单个文件导致异常,这将停止尝试打开文件。

如果您认为如果一个文件失败,则全部失败 - 使用第一个选项,或者如果所有文件都是正确操作所必需的 - 请使用第一个选项,但如果您想要加载尽可能多的文件 - 请使用第二个选项。

相关问题