next up previous contents
suivant: Lancer une exception monter: Exceptions précédent: Throwable   Table des matières

try bloc, catch et finally

Un traite exception a la forme suivante:



transparent
Try bloc


...
try{
 ...
} catch (TypeException e){
             ...
} catch (AutreTypeException e){
             ...
}  ...
} finally { 
             ...
}


Si une exception est lancée au cours de l'exécution, le déroulement normal du programme est interrompu et le contrôle du programme sera parcouru en sens inverse (en dépilant les divers appels de méthode) jusqu'à ce qu'un traite-exception correspondant à cette exception soit trouvé.

Le traite-exception est composé d'une liste de clauses catch. Chacune de ces clauses a un paramètre comme pour une méthode. La règle de correspondance d'une clause catch est la même que pour les paramètres. Le type de l'exception est comparé avec le type du paramètre (en utilisant les règles usuelles, en particulier, l'héritage). Si plusieurs clauses peuvent correspondre à l'exception, la première est choisie et son code est exécuté. (l'environnement de ce code est bien sûr celui du try bloc). Le programme reprend ensuit son déroulement normal.

La clause finally est otpionnelle. Si une exception est lancée, au cours du parcours inverse du contrôle, le code correspondant à cette clause sera toujours exécuté qu'il y ait ou non une clause catch correspondant à l'exception.

On peut modifier le programme précédent:



transparent
catch


//...
    public void writeListe(String st){
        PrintWriter out = null; 
        // déclaration nécessaire pour le finally
        try{
            out = new PrintWriter(new FileWriter(st));
            / peut générer IOException
            for(int i=0; i<size; i++)
                out.println("["+i+"] : "+v.elementAt(i));
                // dépassement possible
            out.close();
        } catch (IOException e){
            //...


transparent
Suite...


  // (suite)
  System.err.println("IOException: "+e.getMessage());
        } catch (ArrayIndexOutOfBoundsException e){
            System.err.println("Sortie du tableau : "+e.getMessage());
        } catch (Exception e){ // très général ...
            System.err.println("Exception: "+e.getMessage());
        } finally {
            if(out != null){
                System.err.println("fermeture de "+st);
                out.close();
            }
        }
    }
}



next up previous contents
suivant: Lancer une exception monter: Exceptions précédent: Throwable   Table des matières
Hugues Fauconnier 2002-01-11