Mono 中的 SystemExceptions 和 ApplicationException 与 Java 中的未检查和选中异常相同吗?

Are SystemExceptions and ApplicationException in Mono the same as unchecked and checked exception in Java?

提问人:leeand00 提问时间:5/2/2019 更新时间:7/21/2019 访问量:110

问:

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

也就是说,在 Mono 中,有 ApplicationExceptions 和 SystemExceptions,我想知道它们在 mono 中是否有相同的目的。

java 异常 nullpointerexception mono nullreferenceexception

评论

0赞 Stephen C 5/2/2019
你是说 C# 吗?
0赞 leeand00 5/2/2019
Mono 是基于 .NET 的,你可以编写 C# 来生成字节码,所以当然,为什么不呢?
0赞 Stephen C 5/2/2019
好吧,我问是因为在 Java 中,选中和未选中异常之间的区别仅由 Java 字节码编译器强制执行。
0赞 leeand00 5/2/2019
很像 .NET?或不?
0赞 Stephen C 5/2/2019
不。不像 .NET。

答:

1赞 Stephen C 5/2/2019 #1

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

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

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

(您应该根据是否期望/希望调用方处理异常来选择将异常声明为选中或未选中。例如,您通常希望应用程序执行一些操作来从 中恢复,但 通常是一个错误,除了日志记录和救助之外无法处理。IOExceptionNullPointerException


相比之下,在 .NET 中,versus 是关于异常的含义;请参阅应用程序异常和系统异常之间的区别。表面上的目的是允许程序区分框架异常和自定义异常。(但它并没有真正起作用......在实践中......因为程序员不遵循准则/约定。ApplicationExceptionsSystemExceptions


我真的只是在检查如果抛出而不是抛出,这种区别是否会使正在运行的程序崩溃SystemExceptionApplicationException

你不能一概而论。如果抛出任何一种异常(或任何其他类型)且未捕获1,则应用程序将崩溃。Java 异常也是如此。

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