抛出异常的重点

时间:2015-09-14 19:14:41

标签: arrays list exception null throw

抛出异常是什么意思? 例如,我偶然发现了这个:

static List<Integer> list(int [] a) {
    if (a == null)
        throw new NullPointerException();
        //...

但是当你不抛出nullpointer时,你还会得到一个nullpointer? 我经常看到这个,我想知道这是一个学习的好习惯吗?

5 个答案:

答案 0 :(得分:1)

快速失败会更好。例如,函数在引用变量&#34; a&#34;之前可以做一堆东西。在你的例子中导致了大量不必要的处理..如果你知道&#34; a&#34;最好只是立即失败。从一开始就是空的。您还可以向异常附加自定义错误消息。

答案 1 :(得分:0)

THROW背后的想法是防止错误停止你的程序。

如果这是一个致命的错误,你的程序无论如何都会停止。但是如果程序可以继续,它会告诉你,发生错误。

在许多情况下,您指定一个函数来报告错误,因为您将其抛出并知道它是什么。

答案 2 :(得分:0)

我总是发现抛出异常是设计和可读性的问题。例如,通常当我设计某些东西时,我更愿意处理它们出现的错误。然而,同样有效的设计是抛出异常并在其他地方处理它。我已经看到了一些抽象,通常你的流程与此类似......

FlowControl - &gt; GenericMethod (仅捕获异常和调用方法) - &gt; PrivateMethods (通常用于执行工作,抛出异常)。

您也可以在此处找到更完整的答案:When to catch the Exception vs When to throw the Exceptions?

答案 3 :(得分:0)

如果使用空指针,那么方法的其余部分可能不会抛出异常,而是会产生某种不良行为。在您的示例中,如果它基本上是“ToList”包装器,则可以实现为:

static List<Integer> list(int[] a)
{
    List<int> ret = new List<int>();
    foreach (int i in a)
        ret.add(i);
    return ret;
}

而不是抛出,这只会返回一个空列表(如果我至少回想一下,我不认为C#会抛出foreach中使用的空列表)。因此,您需要包含显式空值检查和throw以获得所需的行为。

答案 4 :(得分:0)

抛出特定异常意味着您的应用程序遇到了它不应该遇到的问题。它可以是无效参数(当有人传递null并且当前方法不能使用null值时),无效字段状态(其值已被更改为某个值,例如当前状态被禁止)以及更多。

基本上,当您以良好的方式抛出异常时,每个人都会使用例如库可以保持正确的流程。