为什么在Java中抛出和捕获异常是强制性的,而在C#中则不是?

为什么在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中,我们有义务在方法之外抛出异常(如果它没有在方法中处理),并在使用这种方法时捕获异常

我用C#和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();
        }
    }
}