:: Enseignements :: Master :: M1 :: 2007-2008 :: Java Avancé ::
[LOGO]

Quelques notes pour le TD2


Chaines de caractères (non) mutables

En Java les chaînes de caractères sont représentées par deux classes :
  • java.lang.String non mutable
  • java.lang.StringBuilder mutable
Effectuer une opération sur String crée un nouvel objet (non-mutable), tandis qu'une opération sur StringBuilder change l'état de l'objet courant (mutable).

L'interface CharSequence

L'interface CharSequence est implantée, entre autres, par les deux classes suivantes:
  • String, chaîne de caractères immutable
  • StringBuilder, buffer de caractères mutable et auto-expansif

StringBuilder

Equivalent mutable de String , possédant un buffer de caractères qui s'agrandit tout seul. Un StringBuilder est utilisé pour créer une chaîne de caractères qui sera après rendue immutable par un toString() .
 public class StringBuilderExample{
     public static void main(String[] args){
          StringBuilder builder = new StringBuilder();
      for (String s : args){
          builder.append (s).append(" ").append(s.length());
      }
      String result = builder.toString();
      System.out.println(result);
     }
 }
 
Les méthodes append() sont chaînables.

Les exceptions

Les exceptions se produisent lorsque des situations anormales surviennent durant l'exécution d'un programme Java. Les exceptions sont donc de véritables objets créés suite à la détection d'une anomalie dans le déroulement du programme. Les exceptions peuvent et dans la plupart des cas, doivent être interceptées. Il n'est pas nécessaire de gérer les exceptions de la classe RuntimeException . Toutes les méthodes susceptibles de générer une exception doivent soit être comprises dans un bloc try , soit signaler au moyen de la commande throws cette particularité.

Les deux constructeurs qui nous intéressent sont:
  • public Exception(String message) : Constructs a new exception with the specified detail message. The cause is not initialized, and may subsequently be initialized by a call to Throwable.initCause(java.lang.Throwable) . message - the detail message. The detail message is saved for later retrieval by the Throwable.getMessage() method.
  • public Exception(String message,Throwable cause) : Constructs a new exception with the specified detail message and cause. Note that the detail message associated with cause is not automatically incorporated in this exception's detail message. message - the detail message (which is saved for later retrieval by the Throwable.getMessage() method). cause - the cause (which is saved for later retrieval by the Throwable.getCause() method). (A null value is permitted, and indicates that the cause is nonexistent or unknown.)

Signalisation d'une exception

Dans la déclaration d'une méthode, le mot clé throws permet de signaler le ou les exceptions qu'elle sera susceptible de lancer.
public int uneMethode() throws ClasseException{
    ...
}
La signalisation des exceptions est une obligation si :
  • une méthode contient une ou plusieurs instructions throw chargées de déclencher des exceptions,
  • la méthode ne dispose pas d'un mécanisme d'interception suffisant pour les capturer toutes.
Dans le cas des exceptions de types RuntimeException , il n'est pas nécessaire de signaler le risque de génération d'exception.

Génération d'une exception

La génération d'une exception s'effectue par l'instanciation de la classe Exception ou de l'une de ses nombreuses dérivées et par l'utilisation du mot clé throw .
//déclenchement d'une exception
throw new Exception();

//déclenchement d'une exception DataFormatException descendant de la classe Exception
throw new DataFormatException("Mauvais format de données!");

//propagation d'une exception catchée e
throw e

Récupération d'une exception

Afin de récupérer et traiter une exception, tout code pouvant lever un exception e de type typeException doit se trouvé dans un bloc "try-catch":
try{
    mon code pouvant lever une exception
}catch (typeException e){
    code du traitement de l'exception
}