In realtà non sono bravo nel campo, potrei però dirti che ce differenza funzionale.
Il try-catch è proprio la gestione dell'eccezione, il blocco try si ferma quando viene lanciata un'eccezione e vengono poi controllati i blocchi catch in base all'eccezione lanciata.
Un'eccezione lanciata è proprio una classe che estende la classe Throwable. Ti faccio un esempio:
Mettiamo caso io voglia calcolare la divisione di due numeri e gestire il problema del fatto che il denominatore non può essere uguale a zero.
Allora mi servirà un'eccezione, una classe che estende Throwable, che informa del problema:
codice:
class Eccezione extends Throwable {
/**
*
*/
private static final long serialVersionUID = 1L;
public Eccezione() {
System.err.println("Il denominatore non può essere uguale a zero.");
}
}
A questo punto nel metodo che effettua la divisione tra due numeri, devo definire che può lanciare un'eccezione del tipo Eccezione e lanciare un istanza di Eccezione, quando il denominatore della frazione è proprio uguale a zero.
Il metodo può essere questo:
codice:
public static double divisione(int num, int den) throws Eccezione {
if (den==0) {
throw new Eccezione();
} else {
return num/den;
}
}
Come vedi l'eccezione lanciata è un'istanza della classe Eccezione. A questo punto nel metodo main posso fare questo:
codice:
public static void main(String[] args) {
s = new Scanner(System.in);
System.out.print("Inserisci il numeratore: ");
int num = s.nextInt();
System.out.println();
System.out.print("Inserisci il denominatore: ");
int den = s.nextInt();
System.out.println();
try {
System.out.println("Il risultato è: "+divisione(num,den));
} catch (Eccezione e) {
System.out.println("L'eccezione è dichiarata e gestita.");
}
}
Ti ho mostrato essenzialmente come creare un'eccezione, però altro non so riguardo a queste quindi se vuoi sapere di più ti consiglio di leggerti un tutorial completo o aspettare qualcuno più bravo di me sul forum.
Ah la classe che estende Throwable eredita da essa il metodo printStackTrace() che mostra il solito messaggio di eccezione, in genere che mostra dove è stata lanciata l'eccezione nel codice. Il costruttore con il metodo di stampa è solo un'aggiunta che ho messo per farti vedere che l'eccezione è una classe qualsiasi.