为什么在Java中抛出和捕获异常是强制性的,而在C#中则不是?
我用C#和Java编写了两个相应的代码:为什么在Java中抛出和捕获异常是强制性的,而在C#中则不是?,java,c#,exception,exception-handling,try-catch,Java,C#,Exception,Exception Handling,Try Catch,我用C#和Java编写了两个相应的代码: class Class { public static void f() { throw new Exception("error"); } } class Program { static void Main(string[] args) { Klasa.f(); } } 在Java中,我们有义务在方法之外抛出异常(如果它没有在方法中处理),并在使用这种方法时捕获异常
class Class
{
public static void f()
{
throw new Exception("error");
}
}
class Program
{
static void Main(string[] args)
{
Klasa.f();
}
}
在Java中,我们有义务在方法之外抛出异常(如果它没有在方法中处理),并在使用这种方法时捕获异常。另一方面,C#并没有强迫我们这么做。为什么?哪种方法更好?我们可以在这里推动C#像Java一样工作吗?由于异常不构成C#中方法声明的一部分,因此任何异常都可以由任何方法抛出,而不需要方法声明。因此,异常从不需要处理,因为它从不需要声明
这一切都与设计决策有关。你可能会问自己,为什么Java没有Lambda表达式。就我个人而言,虽然有些时候很烦人,但我更喜欢Java的方法,因为它是声明性的,你事先知道一个方法可能会做什么,并控制你可能会如何处理它——IMHOI也这么认为,所以我想知道是否有可能在C#中获得这种特性……为什么?因为语言是由不同的人发展起来的。哪一个?你最喜欢的那个。推动C#像Java一样工作?而是用java编写代码。顺便说一句,这个问题涉及面很广,而且是基于观点的。如果你想得到好的答案,请专注于一点(而不是“为什么X是那样工作的?”,因为我们不知道在他们的开发过程中发生了什么)。苹果和橙子哪个更好?不包括C#中Java检查异常的等价物,以及围绕它的方法已经讨论了多次。Linked将为您提供指向讨论的链接。IMO Java更安全,因为程序员知道方法中未处理的可能异常。。。但是可能。。。视情况而定;)另一方面,有时真的很烦人
class Class {
public static void f() throws Exception {
throw new Exception("error");
}
}
class Program {
public static void main(String[] args) {
try {
Klasa.f();
} catch (Exception e) {
e.printStackTrace();
}
}
}