Okay, ik ga er vanuit dat we allemaal nette code schrijven en op de juiste plekken try/catch blokken schrijven. In veel gevallen is het echter zo dat in het catch-deel de gevangen Exception weer opnieuw gegooid wordt. Zoals bijvoorbeeld:
try{
//doe iets dat wellicht fout gaat
}
catch(Exception ex){
//doe iets moois
throw ex;
}
Je verwacht nu dat de Exception ex die je gevangen hebt, wordt gegooid. Niets is minder waar. De Exception ex wordt onder water aangepast. De stacktrace wordt opnieuw opgebouwd, met als gevolg dat je niet meer precies het regelnummer krijgt van de code die fout is gegaan, maar het regelnummer waar je de Exception hebt gegooid. Wanneer je de Exception ongewijzigd wil gooien gebruik dan :
try{
//doe iets dat wellicht fout gaat
}
catch(Exception ex){
//doe iets moois
throw;
}
Het eenvoudig weglaten van de ‘ex’ na de throw zorgt ervoor dat het Exception object ongewijzigd blijft.