咩.
检查异常是正确使用的好东西,但往往导致以下事情:
doSomething();
try
{
somethingThrowsCheckedException();
}
catch(ThatCheckedException)
{ }
doSomethingElse();
坦白说,这是错误的.你应该让异常不能处理起泡.
检查的正常使用的异常情况可能很好.但是非常频繁地,正确检查异常的结果是这样的方法签名:
public void itMightThrow() throws Exception1, Exception2, Exception3, Exception4, // ...
Exception12, Exception13, /* ... */ Exception4499379874
{
// body
}
我夸张吗只是轻微.
编辑:
也就是说,有一件事我喜欢C#对Java,当涉及异常处理与检查异常无关(我可以得到,如果我去与规范#无论如何).不,我喜欢的是,当你抛出异常时,C#中的堆栈跟踪是填充的,而不是像在Java中一样实例化的.
编辑2:这是给评论者@Yishai,@Eddie,@Bill K:
首先,您应该查看this thread有关如何获取堆栈跟踪的信息,而不实例化异常.请记住,步行堆栈是一个沉重的过程,不应该定期进行.
第二,我喜欢C#的异常堆栈跟踪的原因是在throwal而不是实例化的原因是你可以这样做:
private MyException NewException(string message)
{
MyException e = new MyException(message);
Logger.LogException(message, e);
return e;
}
// and elsewhere...
if(mustThrow)
{
throw NewException("WHOOOOPSIEE!");
}
这是Java中无法在堆栈跟踪中包含NewException方法的一个技巧.