Let me sum up everything you need to know about try, catch and throw..... don't use them.
Exceptions have their place. Normally when you are throwing an exception it isn't at a time when performance matters. No one brags about how fast or optimized their error handling system is and if they did I would consider them an idiot. Who cares? Exceptions normally cause the entire system to come down anyways and if on the odd chance you can recover and continue you probably won't be doing anything performance oriented anyways. Now if it is real time software or running 24/7/365 for critical tasks then obviously you must recover from an exception, however, not throwing the exception will most likely bring the system crashing down. In the end I'll take the hit for the stability it offers. I see nothing wrong with the try/catch mechanism as long as it is used correctly. Of course it can be abused but that does not mean it is meaningless or has no place in the language. Beware of people who say don't ever use this or that b/c of this or that. I find those types of programmers are both annoying and clueless. The language and it's various elements and mechanisms are there to be used for various situations.....so use them. No one language mechanism is an end all be all of what you should and should not do.