Паспрабуйце злавіць заяву ўнутры блока Ьги

Ці будзе якое-небудзь значэнне, выкарыстоўваючы заяву злавіць паспрабаваць ўнутры яшчэ адну спробу блока?

    try{
       //some code...
        try{
           //some code...
        }catch(Exception ex){
            ex.printStackTrace();
        }
       //some code...
    }catch(Exception ex){
        ex.printStackTrace();
    }
2
У гэтым выпадку, ваш трэці «некаторы код» будзе выконвацца, нават калі ваш другі «некаторы код» кідае выключэнне. Калі вы выдаліце ​​ўнутраную Try-зашчапку, ён не будзе.
дададзена аўтар Burkhard, крыніца
калі ласка, дадаць больш інфармацыі аб вашым пытанні.
дададзена аўтар KhAn SaHaB, крыніца

8 адказы

Так. Вы можаце злавіць вельмі канкрэтнае выключэнне ва ўнутраным блоку, які вы маглі б справіцца і вярнуцца да астатняй частцы блока ...

Вы, як правіла, рабіць гэта толькі з больш канкрэтнымі выключэннямі ва ўнутраным блоку, хоць, а не ўсёабдымная.

3
дададзена

Гэта можа мець сэнс, калі вы ловіце іншае выключэнне ў ўкладзены ўлову. Я хацеў бы выкарыстаць укладзеныя адзін, каб злавіць больш канкрэтнае выключэнне, а не адзін агульны.

1
дададзена

Вядома, гэта мае сэнс. Калі другі блок «некаторы код» кідае выключэнне можа мець сэнс, каб выканаць трэці блок «некаторы код» у любым выпадку. Тым не менш, адзін павінен пераканацца ў тым, што трэці блок не залежыць ад якіх-небудзь вынікаў другога блока.

1
дададзена

адна прычына, я магу думаць, вы хочаце запусціць блок кода, дзе некалькі выключэнняў можа быць выкінута, некаторыя з якіх павінны разарваць паток прыкладання, і некаторыя з іх не варта.

public void storePerson(Person input){
  try{
    validatePerson();//if person is not valid, don't go through the flow
    try{
      writeInLog("I will be storing this person: " + input.getName());
    }
    catch(Exception e){
      System.out.println("Should have generated a logFile first, but hell, this won't put the flow in jeopardy.");
    }
    performPersistenceTasks(input);

  }
  catch(Exception e){
    e.printStackTrace();
    throw new Exception("Couldn't store the person");
  }
}
1
дададзена

Так,

try
{
 int i=1;

 try
       {


       j=i/0;      //caught error
       }
catch(Exception e)
 {
 }

 j=i/1;

   ...               //continue execution
   ...

  }
  catch(Exceptione e)
{

}
1
дададзена

Звычайна, калі вы будзеце атрымліваць розныя выключэння, вы проста дадаць уловах заявы ў ваш паспрабаваць/злавіць , паважаючы іерархічны парадак ...

Напрыклад:

try{

}catch(IOException io){ //This catch is if you know that a IOException can occur

}catch(Exception e){ //This catch is if other exception not expected happens

}
1
дададзена

Наогул, я б пазбегнуць. Ён выкарыстоўвае занадта шмат выключэнняў для апрацоўкі патоку кіравання праграмай, і ён выглядае па-чартоўску непрыгожа. ИМО вы павінны мець выключныя блокі, як плоскія, як гэта магчыма. Выкарыстоўвайце толькі гэты убудаваны TRY/злавіць у выключных абставінах.

0
дададзена

Часам можа ўзнікнуць сітуацыя, калі частка блока можа выклікаць адну памылку, і сам ўвесь блок можа выклікаць іншую памылку. Укладзеныя спроба карысная ў гэтых выпадках

0
дададзена