抛出异常是什么意思? 例如,我偶然发现了这个:
static List<Integer> list(int [] a) {
if (a == null)
throw new NullPointerException();
//...
但是当你不抛出nullpointer时,你还会得到一个nullpointer? 我经常看到这个,我想知道这是一个学习的好习惯吗?
答案 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值时),无效字段状态(其值已被更改为某个值,例如当前状态被禁止)以及更多。
基本上,当您以良好的方式抛出异常时,每个人都会使用例如库可以保持正确的流程。