一般情况下,我想创建一个代码,使调用成为可能引发异常的类的Execute函数。我的问题是我应该设置类,我应该在try / catch或out方面从中提取值吗?
选项A:
neededValue V;
try
{
MyClass C = new MyClass();
C.SomeParam = XXX;
C.Execute();
V = C.SomeParam2;
}
catch
{
//Clean up...
//Log...
//Throw new exception
}
选项B:
neededValue V;
MyClass C = new MyClass();
C.SomeParam = XXX;
try
{
C.Execute();
}
catch
{
//Clean up...
//Log...
//Throw new exception
}
V = C.SomeParam2;
我知道两者都有效,但哪个更好更容易阅读?
答案 0 :(得分:11)
嘿那些不是一回事,在第一种情况下V = C.SomeParam2;
永远不会在异常的情况下被执行,而在第二种情况下它将永远被执行。
更重要的是,你的catch块使用的例子是非常错误,总是将异常对象放在catch之后并使用日志记录框架记录某些已经发生的事情,然后如果发生异常则做出反应并处理异常你可以,并且只有在它有意义的情况下,或者扔它或者根本没有捕获它,你的调用代码才会捕获它。
答案 1 :(得分:4)
我会说选项B更容易阅读,更实用,因为稍后您会知道执行可以抛出和异常。
它们不同,在选项B中如果你处理异常,那么你的B变量也将被设置,而不仅仅是你的执行成功。
你应该总是用catch块指定你捕获的异常类型,这样你就可以处理它和/或正确记录它。
答案 2 :(得分:2)
我会说选项a更具可读性。而且我当然会如何做到这一点。
答案 3 :(得分:1)
两者都可以正常使用
但如果你想在try catch块之外使用MyClass
对象,请使用第二个。
和
在MyClass
对象的第一个范围内,最多只能尝试阻止。
所以它取决于您的要求如何使用其中之一。
答案 4 :(得分:1)
我认为你应该在你的try块中包含所有与你想要完成的小任务有关的代码。但是,有时您需要在输入try块之前定义某些变量。例如,你总是想在try块之前定义InputStreams和OutputStreams,这样你就可以在finally块中关闭它们。
答案 5 :(得分:0)
这主要取决于一个问题。如果V
方法失败,是否要为C.SomeParam2
分配值Execute
,并抛出异常?
如果您不希望在失败时分配,请转到A,如果您希望分配Execute
,请转到B.