C#与Java';s可投掷
本文关键字:Java | 更新日期: 2023-09-27 18:20:58
什么是等价于Java的Throwable
的C#?
在Java中,异常类层次结构的根被称为Throwable
,而不是Exception
。Throwable
基类有两个派生类:
Exception
:用于合理的应用程序可能想要捕获的条件。
Error
:对于一个合理的程序不应该试图抓住的严重问题。
因此,Throwable
基类包含了一个合理的程序不应该试图捕捉的问题。
这将是Exception类。除了.NET中的异常之外,没有单独的"可丢弃"概念。
.Net允许任何类的异常,但C#将throw和catch限制为Exception。使用既不指定类型也不指定变量的catch子句来捕获非Exception异常。
相关规范片段:
当catch子句指定类类型时,该类型必须是System.Exception、从System.Exception派生的类型或以System.Exception(或其子类)作为其有效基类的类型参数类型。
当catch子句同时指定类类型和标识符时,将声明给定名称和类型的异常变量。异常变量对应于一个局部变量,其作用域扩展到catch块上。在执行catch块期间,异常变量表示当前正在处理的异常。为了进行明确赋值检查,异常变量被认为是在其整个范围内明确赋值的。
除非catch子句包含异常变量名,否则不可能访问catch块中的异常对象。
既不指定异常类型也不指定异常变量名的catch子句称为通用catch子句。try语句只能有一个通用catch子句,如果有,则必须是最后一个catch子句。
一些编程语言可能支持不能表示为从System.Exception派生的对象的异常,尽管C#代码永远不会生成这样的异常。可以使用通用catch子句来捕获此类异常。因此,通用catch子句在语义上与指定类型System.Exception的子句不同,因为前者也可以捕获来自其他语言的异常。
.Net 4.0引入了一个类似于Java的Error类的概念。当CorruptedStateException扩展Exception时,只有具有HandleProcessCorruptedstateException属性的方法才能捕获CSE。