Ciao. Allora, considera questo pezzo di codice:

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

public class ReceiveEMail {

/**
* Oggetto Store
*/
private Store conserva;

/**
* Oggetto properties
*/
private Properties prop;

/**
* Oggetto Sessione
*/
private Session sessione;

/**
* Oggetto Folder simile
* alla casella di posta elettronica
*/
private Folder folder;

/**
* Oggetto messaggio
*/
private Message messaggio;

/**
* Array di messaggi contenuti in quel folder
*/
private Message[] elencoMessaggio;

/**
* Indirizzo mittente
*/
private InternetAddress daChi;

/**
* Indirizzo destinatario
*/
private InternetAddress aChi;

/**
* Oggetto stringa
* contenete l'indirizzo
* del mittente
*/
private String da;

/**
* Costruttore della classe
*/
public ReceiveEMail( ) {

prop = System.getProperties();
sessione = Session.getDefaultInstance( prop, null );
}

/**
* Metodo che si occupa di settare lo Sotre in base a:
* 1) tipo di protocollo ( Se POP3 o IMAP )
* 2) l'host cui connettersi
* 3) l'username
* 4) la password
* @param provider -specifica se s i usa POP3 oppure IMAP o qualsiasi altro
* @param host -l'host cui connettersi
* @param userName -l'username del client
* @param password -la password del client
*/
private void setStore( String provider, String host, String userName, String password ){

try {
conserva = sessione.getStore( provider );
conserva.connect( host, userName, password );
}
catch (NoSuchProviderException ex) {

ex.printStackTrace();
}
catch( MessagingException me ){

me.printStackTrace();
}
}
............
}


Come vedi nel metodo setStore c'è un blocco try/catch Questo serva a fare in modo che se capita una certa eccezione ( nel mio caso NoSuchProviderException e MessagingException ) il controllo passa al blocco catch che la gestisce secondo come il programmatore ( cioè noi ) ha deciso; nel mio caso semplicemente gli faccio stampare l'errore. Se non avessi voluto usare ciò avrei potuto fare:

import java.util.*;

import javax.mail.*;
import javax.mail.internet.*;

public class ReceiveEMail {

/**
* Oggetto Store
*/
private Store conserva;

/**
* Oggetto properties
*/
private Properties prop;

/**
* Oggetto Sessione
*/
private Session sessione;

/**
* Oggetto Folder simile
* alla casella di posta elettronica
*/
private Folder folder;

/**
* Oggetto messaggio
*/
private Message messaggio;

/**
* Array di messaggi contenuti in quel folder
*/
private Message[] elencoMessaggio;

/**
* Indirizzo mittente
*/
private InternetAddress daChi;

/**
* Indirizzo destinatario
*/
private InternetAddress aChi;

/**
* Oggetto stringa
* contenete l'indirizzo
* del mittente
*/
private String da;

/**
* Costruttore della classe
*/
public ReceiveEMail( ) {

prop = System.getProperties();
sessione = Session.getDefaultInstance( prop, null );
}

/**
* Metodo che si occupa di settare lo Sotre in base a:
* 1) tipo di protocollo ( Se POP3 o IMAP )
* 2) l'host cui connettersi
* 3) l'username
* 4) la password
* @param provider -specifica se s i usa POP3 oppure IMAP o qualsiasi altro
* @param host -l'host cui connettersi
* @param userName -l'username del client
* @param password -la password del client
*/
private void setStore( String provider, String host, String userName, String password ) throws NoSuchProviderException, MessagingException{

conserva = sessione.getStore( provider );
conserva.connect( host, userName, password );
}
............
}


In questo caso chiunque avesse chiamato il metodo setStore avrebbe dovuto occuparsi di gestire le due possibili eccezioni o inserendo try/catch oppure, nel caso fosse un altro metodo a chiamare setStore, con throws.......
In tal caso c'è una cosiddetta "propagazione" dell'eccezione che, se non gestita,potrebbe giungere al main e far terminare il programma anomalamente. Spero di essere stato più chiaro di prima.
Ciao