transparent
... try{ ... } catch (TypeException e){ ... } catch (AutreTypeException e){ ... } ... } finally { ... }
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
//... 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){ //...
// (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(); } } } }