2009-11-24 32 views
1

我期待在Java中抛出一般的ExceptionJava中的一般例外

“情况”基本上是如果遇到空行,抛出异常并忽略空行。

现在,我来自C#的背景,所以我只会抛出一个正常的Exception。在Java中,有没有一个?我似乎无法找到它。

我知道我可以断言,但是这会使用AssertionException正确解决问题吗?

感谢,

凯尔


编辑:

感谢您的答案。不幸的是,这是我自己的愚蠢,让我错过了Exception,这是我在检查之前发现的。我接受了Bills针对断言评论的回答,考虑到由于太多的投票,我无法删除该问题(在10秒钟内,我可能会添加,嘿嘿)。

回答

6

Java有一个普通的Exception类,但你几乎从不想抛出它。我更愿意扩展它(或另一种异常类型),以制定更具体的例外以适应您的具体情况。

此外,您不应该使用断言来代替在您的代码中抛出异常。断言可能被禁用(并且默认情况下被禁用),因此当代码由最终用户运行时,不能指望它们在那里。 Sun的文章Programming With Assertions中有很多很好的信息。

+0

我同意。我只需要针对这种特定场景的简单类型例外。 – 2009-11-24 18:59:38

4

我想知道为什么你需要在第一个地方抛出异常。如果您的目标是忽略空白行,那么if声明听起来像是更好的解决方案。不要将异常用作正常流量控制的替代品。

+0

确实。这是为了学习的目的。我绝不会为这种容易避免的生产问题抛出异常。整个例外情况仍然适用于特殊情况。 – 2009-11-24 19:01:56

+0

,特别是它们的性能价格... – 2009-11-24 19:07:01

0

Bozho是对的。但更完整的答案是,在C#中,所有异常都必须继承System.Exception,而在Java中,您可以抛出任何继承自java.lang.Throwable的东西。 java.lang.Exception继承java.lang.Throwable,并且是Java中使用的大多数异常的超类。不过,您可能想要抛出一个java.lang.Error,或者创建您自己的可抛类来使用。

否则,语义都非常相似:

throw new Exception(); 

然而,大多数时间异常应该只在特殊情况下被抛出。如果您希望接收空行,并期望忽略它们,则代码应该处理此情况而不会抛出异常。

+2

-1 - 您绝对不应该从应用程序代码中明确地抛出错误或错误的子类型。如果你想要一个未经检查的异常,那么有更多可接受的方法来实现它。 – 2009-11-24 23:53:27

+0

我的理解是,通常认为抛出未经检查的异常通常被认为是不好的做法 - 那么为什么抛出Error比抛出RuntimeException更糟?你将不得不原谅我 - 当谈到Java时,我有些不知所措。 – Dathan 2009-11-25 17:07:30

+0

这根本不是坏习惯 - 用于检查方法输入的一些最常见的异常(例如IllegalArgumentException)未被选中。在C#中,所有异常都未被选中。 – ayahuasca 2015-08-25 17:21:49