For a try block we can have multiple catch blocks.Only thing to be noted for the catch blocks is that if catch blocks have a parent child relationship then child catch block will come before the parent catch block otherwise a catch not reached error will be thrown by the compiler because in that case the compiler will know that the exception will be caught by the parent class and child class catch code will never be reached as catch acts like switch statement i.e if one catch block can't catch the exception it moves to next catch but if parent catch block is before child blockk case control will never ever go to the child catch so no need of it after parent catch block
Control always go to finally if exception occurs or not.Even if try or the catch block has a break or return statement even then control will go to finally.It will never go to finally if try or catch has a System.exit command as in this case it will come out of memory itself.
try{}
catch(FileNotFoundException fne){}//This is child of IO exo so comes before that
catch(IOException io){}//This is child of Exception so comes before that.
catch(Exception e){
e.printStackTrace();
System.out.println(e.getMessage());
finally(){
}