如题?高手指点一二吧~

解决方案 »

  1.   

    肯定有。
    try后的语句 是肯定 执行的 ,如果执行的没有错 ,except后的 语句就不直执行。
    有错的话,就执行except后的 语句。finally和 try也一样,一定执行。
      

  2.   

    try
      try  except  end;
    finallyend;
    try
      try  finally  end;
    exceptend;你自己这么写一下应该就比较清楚了. 不同的位置,当然就有不同的执行顺序,意义了
    看你想要做什么。
    一般来说 except处的代码需要在try里的代码块出现异常时才会执行,而finally处的代码是一定会被执行到的
      

  3.   

    try ..finally是不管是否发生异常都能确保资源的正确释放。
    try...except是异常保护,遇到异常就跳出。这样可能就有部分资源未释放。基本上说,用try...finally包含try...except或try...except包含try...finally并不是绝对的,也没有好不好的分别,主要是看你需要释放的资源在哪里。
    procedure test1;
     var
      r:TBitmap;
    begin
      r:=TBitmap.Create;
      try
        try
          r.LoadFromFile('c:\a.bmp');
          //do some thing here;
        except
          ShowMessage('error')
        end;  finally
        r.Free;
      end;end;
    上面这个过程就能有异常处理,而且不管是否发生异常都可以正确释放资源。
      

  4.   

    没有调查就没有发言权,我自己动手试了试。
    查看以下代码(用try…finally包含try…except)
    procedure TForm1.TestProc;
    var
      BitPic: TBitmap;
    begin
      BitPic := TBitmap.Create;
      try
        try
          BitPic.LoadFromFile('c:\a.bmp');   //A句
          ShowMessage('Execute here.');
          ShowMessage('And here.');
        except
          ShowMessage('error')
        end;
      finally 
        BitPic.LoadFromFile('c:\b.bmp');    //B句   
        BitPic.Free;
        ShowMessage('Free BitPic...');
      end;
    当A句执行发生异常时,他所处的try…except块将捕捉到该异常,而当finally块中的B句发生异常,该异常将由DELPHI的应用程序框架捕捉。(VCL框架使得所编写的整个应用程序被包在一个大的try…except中)。再看以下代码(try…except包含try…finally):
    procedure TForm1.TestProc;
    var
      BitPic: TBitmap;
    begin
      BitPic := TBitmap.Create;
      try
        try
          BitPic.LoadFromFile('c:\a.bmp');  //A句
          ShowMessage('Execute here.');
          ShowMessage('And here.');
        finally
          BitPic.Free;
          BitPic.LoadFromFile('c:\b.bmp');  //B句
          ShowMessage('Free BitPic...');
        end;
      except
        ShowMessage('error')  
      end;
    end;
    无论A句还是B句执行发生异常,都将被该try…except语句捕捉。也就是说try…except将捕捉它的try块中所有的语句执行异常,无论它是不是在finally块中。这是两种包含方式的第一个区别;
    两种包含方式的另外一个区别就是先释放资源再处理错误,还是先处理错误再释放资源。谁先谁后,根据包含关系显而易见。
    根据此例得到的经验是:finally中应该只做释放资源等"善后工作",当然要做其他的也可以,它一样能被他外围的try…except语句所捕捉,不过不太厚道。Try…except是delphi提供给程序员用来捕捉特定错误的工具,所以,本人觉得如果确有必要使用这种相互包含,应推荐使用try…finally包含try…except,因为程序员不需要关心在finally块中的语句执行异常,而只需要通过该工具捕捉特定语句的异常。
    说到这,也许大腕儿们觉得我说了通大实话,那就当本菜鸟“自言自语”吧,一点经验,希望能给一些没有接触过的人一些帮助。
      

  5.   

    try
      try
      语句1;
      exception
      语句2;
      end
    Finally
      语句3;
    end;
    语句4;
    1、如果语句1未出现异常,则会执行语句3接着执行语句4;
    2、如果语句1出现异常,则进入语句2进行判断,如果对这一异常进行了响应则会执行语句3接着执行语句4;
    如果对这一异常未响应则会执行语句3后退出当前过程,语句4不会执行;
    如果语句2对所有异常进行了响应,则会执行语句3接着执行语句4;
    try
      try
      语句1;
      Finally
      语句2;
      end
    Except
      语句3;
    end;
    语句4;1、如果语句1未出现异常;则执行语句2,接着执行语句4;
    2、如果语句1出现异常,则会先执行语句2,接着进入语句3进行判断,如果对这一异常进行了响应则会执行语句4,如果对这一异常未响应则会立即退出当前过程,不会执行语句4;
      

  6.   

    fj218(洞庭风):
    閣下所寫第一段如下:
    -----------------------------------------
    try
      try
      语句1;
      exception
      语句2;
      end
    Finally
      语句3;
    end;
    语句4;
    1、如果语句1未出现异常,则会执行语句3接着执行语句4;
    2、如果语句1出现异常,则进入语句2进行判断,如果对这一异常进行了响应则会执行语句3接着执行语句4;
    如果对这一异常未响应则会执行语句3后退出当前过程,语句4不会执行;
    如果语句2对所有异常进行了响应,则会执行语句3接着执行语句4;
    -----------------------------------------
    我通过试验发现与实际情况有所出入:无论语句2中是否响应了语句1的异常,程序都可以执行到语句4,阁下不妨亲自一试。对于阁下所写的第二段如下:
    -----------------------------------------
    try
      try
      语句1;
      Finally
      语句2;
      end
    Except
      语句3;
    end;
    语句4;1、如果语句1未出现异常;则执行语句2,接着执行语句4;
    2、如果语句1出现异常,则会先执行语句2,接着进入语句3进行判断,如果对这一异常进行了响应则会执行语句4,如果对这一异常未响应则会立即退出当前过程,不会执行语句4;
    -----------------------------------------
    语句1或者语句2发生异常都将执行语句3;
    并且,无论语句3中是否响应了异常,语句4都能被执行。
    我是在DELPHI7下做的,您也可以试试~~
      

  7.   

    try
      try  except  end;
    finallyend;
    表示,执行try...except...end,并最后在执行finally后的语句。(finally后的语句一定回被执行)同时,如果在执行try...finally之间的语句的过程中,如果有一场,则执行except...end之间的语句。try
      try  finally  end;
    exceptend;表示执行try...finally...end之间的语句,如果有异常,则捕获并执行except之后的语句。其中,try...finally...end之间的一定会北执行。而except之后的语句,则不一定被执行。