java - Mono 中的 SystemException 和 ApplicationException 与 Java 中的未检查和已检查异常相同吗?

标签 java exception nullpointerexception mono nullreferenceexception

在Java中,异常有两种类型,主要是未检查异常和检查异常。检查异常允许程序在“catch” block 中捕获并处理异常时进行恢复。如果我没记错的话,未经检查的异常只会导致程序崩溃,因为它们没有被捕获,并且错误一直冒出来,得到了 main 方法而没有被捕获。

也就是说,在 Mono 中,有 ApplicationException 和 SystemException,我想知道它们在 Mono 中是否具有相同的用途。

最佳答案

不,他们不是。区别是不同的。

在Java中,检查与非检查的区别在于Java代码是否需要处理异常:

  • 不需要处理未经检查的异常
  • 需要捕获或在封闭方法的签名中声明受检查的异常。

(您应该根据您是否期望/希望调用者处理异常来选择将异常声明为已检查还是未检查。例如,您通常希望应用执行某些操作以从 IOException 中恢复,但是 NullPointerException 通常是一个错误,除了记录和退出之外无法处理。)

<小时/>

相比之下,.NET 中的 ApplicationExceptionsSystemExceptions 是关于异常的含义;参见Difference Between Application Exception and System Exception 。表面上的目的是允许程序区分框架异常和自定义异常。 (但实际上它并没有真正起作用......因为程序员不遵循指南/约定。)

<小时/>

I'm checking really only to see if the distinction would crash a running program if SystemException was thrown instead of an ApplicationException

你不能做出这样的概括。如果抛出任一类型的异常(或任何其他类型)且未捕获1,应用程序就会崩溃。对于 Java 异常也是如此。

1 - 在 Java 中,这取决于默认异常处理程序的行为。

关于java - Mono 中的 SystemException 和 ApplicationException 与 Java 中的未检查和已检查异常相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55944852/

相关文章:

java - 求两个数字之间的赔率之和

java - spring 如何将 beans 范围与请求、 session 等 HTTP 范围绑定(bind)

java - Throwable 类(Java 中)的 getCause() 函数未按预期工作

java - 使用 For 循环初始化 JTextFields 和 JLabels 并将其添加到 JPanel 使用数组会导致错误

java - 什么是NullPointerException,我该如何解决?

Java 小程序可以在 IDE 中运行,但不能在浏览器中运行

java - 方法返回 null 时的处理

javascript - Vaadin - 从客户端 javascript 组件请求布局

java - Apache Ignite 异常 : Caches have distinct sets of data nodes

C++:如何处理从 std:exception 派生的异常,具体取决于它们的类型?