【问题标题】:Why in Java throwing and catching exceptions is mandatory and in C# is not? [duplicate]为什么在 Java 中抛出和捕获异常是强制性的,而在 C# 中却不是? [复制]
【发布时间】:2014-11-11 19:28:02
【问题描述】:

我用C#和Java写了两个对应的代码:

class Class
{
    public static void f()
    {
        throw new Exception("error");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Klasa.f();
    }
}


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();
        }
    }
}

在 Java 中,我们有义务在方法之外抛出异常(如果它没有在其中处理)并在使用这种方法时捕获异常。另一方面,C# 并没有强迫我们这样做。为什么?哪种方法更好?我们可以在这里推动 C# 像 Java 一样工作吗?

【问题讨论】:

  • 就我个人而言,虽然有时很烦人,但我更喜欢 Java 的方法,因为它是声明性的,您提前知道方法可能会做什么并控制您如何处理它 - 恕我直言
  • 我也是这么认为的,所以我想知道是否有可能在 C# 中获得这种功能......
  • 为什么?因为语言是由不同的人开发的。哪一个?你最舒服的那个。推动 C# 像 Java 一样工作?改用java代码。顺便说一句,这个问题非常广泛且基于意见。如果您想要好的答案,请专注于一点(而不是“为什么 X 会这样工作?”,因为我们不知道他们的开发过程中发生了什么)。
  • 苹果和橙子哪个更好?
  • 不包括 C# 中等效的 Java 检查异常以及已在 SO 上多次讨论过的解决方法。链接的duplicate 将为您提供The Trouble with Checked Exceptions Anders Hejlsberg 的讨论链接。

标签: java c# exception exception-handling try-catch


【解决方案1】:

由于异常不构成 C# 中方法声明的一部分,因此任何方法都可以抛出任何异常,而无需方法声明。因此,一个异常永远不需要处理,因为它永远不需要被声明。

一切都与设计决策有关。您可能会问自己,为什么 Java 没有 Lambda 表达式。

【讨论】:

  • IMO Java 更安全,因为程序员知道方法中未处理的可能异常......但可能...... 这取决于;)另一方面,有时真的很烦人
猜你喜欢
  • 2017-08-12
  • 2017-11-25
  • 2011-11-22
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多