(delphi11最新学习资料) Object Pascal 学习笔记---第9章第1节(异常类的层次结构)

9.1.1 异常类的层次结构

​ 下面是运行时库的 System.SysUtils 单元中定义的核心异常类的部分列表(大多数其他系统库都在下面的核心列表中添加了自己的异常类型):

pascal 复制代码
Exception
	EArgumentException
		EArgumentOutOfRangeException
		EArgumentNilException
	EPathTooLongException
	ENotSupportedException
	EDirectoryNotFoundException
	EFileNotFoundException
	EPathNotFoundException
	EListError
	EInvalidOpException
	ENoConstructException
	EAbort
	EHeapException
		EOutOfMemory
		EInvalidPointer
	EInOutError
	EExternal
		EExternalException
		EIntError
			EDivByZero
			ERangeError
			EIntOverflow
		EMathError
			EInvalidOp
			EZeroDivide
			EOverflow
			EUnderflow
		EAccessViolation
		EPrivilege
		EControlC
		EQuit
	EInvalidCast
	EConvertError
	ECodesetConversion
	EVariantError
	EPropReadOnly
	EPropWriteOnly
	EAssertionFailed
	EAbstractError
	EIntfCastError
	EInvalidContainer
	EInvalidInsert
	EPackageError
	ECFError
	EOSError
	ESafecallException
	EMonitor
		EMonitorLockException
		ENoMonitorSupportException
	EProgrammerNotFound
	ENotImplemented
	EObjectDisposed
	EJNIException

注解:我不知道你是怎么想的,但我仍然需要弄清楚我认为最奇怪的异常类--有趣的 EProgrammerNotFound 异常---的确切使用场景!Delphi 库中隐藏着一些复活节彩蛋,这就是其中之一。

​ 现在,您已经看到了核心异常类的层次结构,我可以在前面关于 Except-on 语句的描述中补充一条信息:这些语句将依次进行评估,直到系统找到与异常对象类型相匹配的异常类为止。现在使用的匹配规则就是我们在上一章中研究过的类型兼容性规则:异常对象与其自身特定类型的任何祖先类型都是兼容的(就像 TDog 对象与 TAnimal 类兼容一样)。

​ 这意味着你可以拥有多个与异常相匹配的异常处理程序类型。如果你希望在处理更细粒度的异常(层次结构中的低级类)的同时,也能处理更通用的异常,以防前面的异常都不匹配,那么你就必须从更具体的异常到更通用的异常(或者从子异常类到父类)列出处理程序块。

此外,如果你为Exception类型编写了一个处理程序,它将是一个涵盖性子句,因此需要放在序列的最后。

下面是一个代码块中包含两个处理程序的代码片段:

pascal 复制代码
function DividePlusOne(A, B: Integer): Integer;
begin
  try
    Result := A div B; // 如果 B 等于 0 则出错
    Result := Result + 1;
  except
    on EDivByZero do
    begin
      Result := 0;
      MessageDlg('除以零错误', mtError, [mbOK], 0);
    end;
    on E: Exception do
    begin
      Result := 0;
      MessageDlg(E.Message, mtError, [mbOK], 0);
    end;
  end; // except 块结束
end;

​ 在这段代码中,同一个 try 代码块后有两个不同的异常处理程序。您可以使用任意数量的处理程序,这些处理程序将按上述顺序进行评估。

​ 请记住,为每一种可能的异常都使用一个处理程序通常不是一个好的选择。最好将未知异常留给系统处理。默认异常处理程序通常会在消息框中显示异常类的错误信息,然后恢复程序的正常运行。

**小贴士:**实际上,你可以通过为 Application.OnException 事件提供一个方法来修改正常的异常处理程序,例如,将异常信息记录到文件中,而不是显示给用户。

相关推荐
_落纸2 天前
三大基础无源电子元件——电阻(R)、电感(L)、电容(C)
笔记
Alice-YUE2 天前
【CSS学习笔记3】css特性
前端·css·笔记·html
2303_Alpha2 天前
SpringBoot
笔记·学习
萘柰奈2 天前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽2 天前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫2 天前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
向阳花开_miemie2 天前
Android音频学习(十八)——混音流程
学习·音视频
工大一只猿2 天前
51单片机学习
嵌入式硬件·学习·51单片机
c0d1ng2 天前
量子计算学习(第十四周周报)
学习·量子计算
Hello_Embed2 天前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件