Effettivamente il codice postato da centro porta ad una ambiguità nell'interpretazione:
1) differenza fra gestione dell'eccezione interna al metodo e gestione esterna

2) gestione dell'eccezione nel caso del codice postato.

Credo sia il caso di riformulare il problema con del codice diverso:
codice:
Differenza fra:

public void myMethod(String arg) throws Exception {
   ... //codice metodo
}

e

public void myMethod(String arg) {
   try {
      ... //istruzioni
   } catch (Exception e) {
      ... // altre istruzioni
   }
}
Gran parte di quello che si poteva dire è già stato detto correttamente da Nosferatu e da Angelo1974: nel primo codice tu dichiari il metodo in modo che il metodo stesso non si preoccupi della gestione delle possibili eccezioni, avvertendo chi usa quel metodo di gestirsele; nel secondo caso, invece, è il metodo stesso a gestire le possibili eccezioni, in modo del tutto trasparente a chi usa quel metodo: chi usa quel metodo può benissimo ignorare l'esistenza delle possibili eccezioni.

Nel caso del codice postato da centrino, invece, sorge un dubbio: pensi che le due parti di codice svolgano la stessa funzione (è quello che diceva Nosferatu quando parlava di soluzioni complementari e non surrogate)? Ebbene no, appunto! La prima parte del tuo codice dichiara un metodo avvertendo chi lo usa che si potrebbe generare un'eccezione al suo interno, "obbligandolo" a gestirla. Nella seconda parte del tuo codice, il metodo viene effettivamente usato e, come da "obbligo" nell'intestazione del metodo, deve essere racchiuso in un blocco try/catch per catturare una possibile eccezione da lui lanciata.

Spero di aver fugato i dubbi.


Ciao.