try except end 和try finally end分别用在什么时候? ( 积分: 100 )

  • 主题发起人 主题发起人 xjw10
  • 开始时间 开始时间
X

xjw10

Unregistered / Unconfirmed
GUEST, unregistred user!
try except end 和try finally end分别用在什么时候?
 
try except end 有预期异常的情况下
try finally end必须完成某种事情下
 
楼上回答很好
 
举简单例子
try
StrToInt(Edit1.Text);
except
ShowMessage('Edit1中不是整数');
end;
try..except中的代码如果发生异常,就会转到except..end;

至于try..finally..end; 我想用的很多的就是动态创建对象
var
fs: TMemoryStream;
begin
try
ds:= TMemoryStream.Create;
......//其他代码
finally
FreeAndNil(ds);
end;
try..finally中的代码就算发生意外,跳出或者终止,始终还是会执行finally..end;中的语句,这样就收回资源
 
To:Hydra0:你好,如果是:
try
StrToInt(Edit1.Text);
ShowMessage('出错');
except
ShowMessage('Edit1中不是整数');
end;
--------ShowMessage('出错');这句还会执行吗?
 
因为我前天去一家厂面试时有个这样的题目:
try
i := 5;
j := 0;
try
i := i+20;
i := i div j;
i := i+30;
finally
i := i+40;
end;
except
i := i+50;
end;
i := i+60;
要求出最终的结果,把我搞糊涂了。大家看看是什么结果。
 
流程是这样的,发生异常后从异常点直接跳入except后的语句,所以异常点后的语句是不会执行的
如果没有发生异常,那就除了except..end;外的语句都会执行

所以,我的例子中,如果Edit1.Text的内容能被转化为Int话,那ShowMessage('出错');就会被执行
如果不能转化,那么ShowMessage('Edit1中不是整数');会被执行,StrToInt(Edit1.Text);后的语句全被忽略掉
 
你那题i=175吧,没上机试,你看对不对
 
虽然出了异常后,异常点后的语句不会执行,不过finally..end;中的语句我先都说过,不管任何情况下都会执行的
 
try except 用在你知道出错原因时,比如你遍个计算器软件,当被0除是软件回报出错误
原因,E开头,你就可一写这样的语句
try
.......
except on E---;
异常后的处理代码;
end;
try finally 表示出现异常后直接跳到finally语句
 
Hydra0:分析得很好。非常感谢,看看还有没有其他人过来发表一下,等下结帖了。
 
结贴了,Hydra0和勇者都有分。
 
后退
顶部