I think that the class that you are trying to load using Class.forName() statement is not found by the classloader so a ClassNotFoundException is thrown before reaching the second statement where you are throwing the exception. Make the class you are trying to load available for the classloader and it will work as you expected.
As Kamesh said, Since you are trying to load a class thats not present, the compiler throws the exception before you throw it. ie, the second line is not getting executed. If you want to throw your exception in this case, give your throws clause in the catch block. And the code that calls this method will receive your error message.
In Example 1, when you are trying to access the file, I think that the file is present (even if the file is not present, File f = new File() creates the file), and there is no FileNotFoundException. But you are forcefully throwing an exception. In that case the throw statement is executed.
In Example 2, there is a ClassNotFoundException, as you are trying to load a class which is not present. In this case, the control goes to the catch block rather than executing the second line (in which you throw the exception). I hope I make sense to you. [ December 27, 2006: Message edited by: Anu Pillai ]
Throw clause usually dosent make any sense in the try block. You have to give your throws clause in the catch block so that any exception caught can be wrapped in your custom exception and be thrown to any other routine calling it.
There might be situations where you want to throw an exception where there is no real exception, but you want to caution your user, in that case you can throw your exception in the try block itself.