关于异常处理和abort ( 积分: 100 )

  • 主题发起人 主题发起人 zhyufei
  • 开始时间 开始时间
Z

zhyufei

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能给我个关于异常处理与abort的例子及说明
 
谁能给我个关于异常处理与abort的例子及说明
 
ABORT激发一个静态异常,并推出当前过程或try .. except块。
 
1/异常处理
procedure TForm1.Button1Click(Sender: TObject);
var
Order: TextFile;
I: Integer;
begin
AssignFile(Order,'c:/Order.txt');
Rewrite(Order);
try
try
for I := 1 to 100 do
Writeln(Order,'第'+IntToStr(I)+'行');

Writeln(Order,'AAAAAAAAAAa');

finally
CloseFile(Order);
end;
Showmessage('设置保存成功!');
except
Showmessage('配置保存失败!请重试');
end;
end;

2、abort例子

procedure TForm1.Button2Click(Sender: TObject);
var:i,j:integer;
begin
i:=1;
if i=1 then
begin
abort;
end;
j:=2;
end;
上面的代码j:=2;就不会执行
i:=1时就跳出来了
 
procedure TForm1.Button2Click(Sender: TObject);
begin
if True then
Abort; //激发一个静态异常后直接退出Button2Click,不会执行后面的ShowMessage语句
ShowMessage('处理完毕');
end;
=================================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
try
if True then
Abort ;
except // Abort激发的异常被捕捉,因此执行except…end中的异常处理代码
ShowMessage('Abort');
end;
ShowMessage('处理完毕'); //执行,因为异常已经被处理。如果使用try…finally,则这句不会被执行
end;
 
具体的代码处理先不要着急,对于一个系统来说,有个理论:“在较低层次捕获异常,在较高层次处理异常。”必须引起足够的重视!
什么意思呢?
即:
在你的内层方法中,如果在发生异常时需要确保资源释放,那么使用try...finally进行内存资源管理,如果没有这个需要就不要进行异常捕获。
在你的外层方法中,用try...except来捕获并处理异常,如发个消息等等。
可不要在最内层的方法里去处理哟,否则对于较大、较复杂的系统来说,是一个非常之糟糕的做法。
 
多人接受答案了。
 
后退
顶部