1. Les tableaux
1.1 Quelques compléments sur les tableaux (voir chapitre 2)
Un tableau est considéré comme un objet. Les tableaux sont toujours
manipulés par référence. La déclaration d'un tableau ne fait qu'associer son
identificateur à une variable de nature référence initialisée à null.
La taille d'un tableau est indiquée lors de sa création par la primitive new. Un
tableau peut être construit sur la base d'un type primitif ou d'un type construit
(classe ou tableau).
Les éléments d'un tableau sont initialisés par des valeurs nulles. On peut
connaître la taille d'un tableau par l'attribut length (exemple : t.length où t
désigne un tableau). Un tableau qui n'est plus référencé est éliminé par le
ramasse miettes.
Exemple
int [][] t=new int[5][];
for(int i=0; i<t.length;i++)
t[i]=new int[5 - i];
for(int i=0; i<t.length;i++)
for(int j=0; j<t[i].length;j++)
t[i][j] = i+j;
2
[0] [1] [2] [3] [4]
t[0] 0 1 2 3 4
t[1] 1 2 3 4
t[2] 2 3 4
t[3] 3 4
t[4] 4
Un tableau déclaré à partir d'une classe, contient des références à des objets de la
classe en question. Chaque élément du tableau représente une référence à un objet.
3
Exemple
public class TestVoiture
{
public static void main(String [] args)
{ Voiture v;
Voiture t[] = new Voiture[2];
// déclaration d'un tableau de deux éléments
t[0] = new Voiture(6513,"vert"); // nouvel objet
t[0].changerCouleur("blanc");
boolean b= t[0] instanceof Voiture;
t[1] =t[0]; // deux références pour un même objet
v=t[1]; // on dispose finalement d'un seul objet
}
}
1.6. La classe Vector
La classe Vector décrit un conteneur d'objets (voir aussi la classe Hashtable et
l'interface Enumeration). Une instance de la classe Vector implémente un tableau
d'objets auxquels on accède par un indice entier. La taille de ce tableau est variable.
4
Les objets (càd les références d'objets) à mettre dans l'instance de Vector peuvent
être de types différents. Un conteneur ne peut pas contenir des éléments de types
primitifs, sauf si on utilise les "Wrapper". Plusieurs services (méthodes) sont
offerts dans la classe Vector. Parmi lesquels :
5
Exemple
import java.util.*; // package qui contient la classe Vector
public class TestVector
{
public static void main(String [] args)
{
Vector vec = new Vector() ;
for (int i=0 ; i<10 ; i++)
{
Integer element = new Integer(i) ;
vec.addElement(element) ; // Ajout en fin de Vecteur
} // => 0 1 2 3 4 5 6 7 8 9
String i = "JAVA";
vec.insertElementAt(i,5) ; // Insertion à la position indiquée
// => 0 1 2 3 4 JAVA 5 6 7 8 9
String j = (String)vec.elementAt(5) ;
System.out.println(" élément de la position 5 :"+j);
vec.removeElementAt(0) ;
//Suppression de l'élément indiqué => 1 2 3 4 JAVA 5 6 7 8 9
6
Integer k = (Integer)vec.elementAt(5) ;
System.out.println(" élément de la position 5 :"+k);
// k contient une référence sur l'objet Integer contenant 5
vec.removeAllElements() ;
// Suppression de tous les éléments
} //fin main()
}//fin classe
7
Exemple
class TableauChar
{public static void main(String[] arg)
{ char[] tableau;
tableau = new char[4];
tableau[0] = 'J';
tableau[1] = 'A';
tableau[2] = 'V';
tableau[3] = 'A';
System.out.println(tableau); //affiche : JAVA
}
}
2.2. La classe String
JAVA offre dans sa librairie (API) une classe appropriée aux chaînes de
caractères nommée String, très riche en fonctionnalités. La classe String offre
des objets constants de chaînes. Cela signifie que le contenu de l'objet String
ne peut pas être modifié. Cependant, la même référence de l'objet peut être
utilisée pour désigner d'autres objets String.
8
La classe String est très utilisée dans les applications JAVA, pour des raisons
de facilité, on peut s'en passer de l'utilisation de l'opérateur new pour instancier
un objet String. Les opérateurs + et += sont utilisés pour réaliser la
concaténation des chaînes.
Exemple
class TestString
{
public static void main(String [] args)
{ String ch1,ch2;
ch1="Programmation";
ch2=ch1;
System.out.println("ch1: " +ch1);//Programmation
System.out.println("ch2: " +ch2);//Programmation
ch1+=" en JAVA"; //Création d'un nouvel objet
System.out.println("ch1: " +ch1);//Programmation en JAVA
System.out.println("ch2: " +ch2);//Programmation
Ch1=Clavier.lireString();//encore un nouvel objet
}}
9
Parmi les fonctionnalités offertes par la classe String :
char charAt(int i) : retourne le caractère dans la position i (la première
position est d'indice 0)
int compareTo(String anotherString) : retourne 0 si les deux chaînes comparées
sont égales, une valeur inférieure à 0 si la chaîne comparée est inférieure à la
chaîne en argument et une valeur supérieure à 0 si la chaîne comparée est
supérieure à la chaîne en argument
boolean equals(Object anotherObject) : retourne true si anotherObject est un
String qui contient la même séquence de caractères
boolean equalsIgnoreCase(String anotherString) : même rôle que equals mais
sans tenir compte de la différence entre majuscule et minuscule
int indexOf(int ch) : retourne l'indice de la première occurrence de ch (considéré
comme un caractère) dans la chaîne (ou –1)
int indexOf(String str) : retourne l'indice du premier caractère de la première
occurrence de str dans la chaîne (ou –1)
String concat(String str) : retourne un nouvel objet String contenant la chaîne en
argument concaténée à la fin de la chaîne traitée. Si la longueur de str est nulle,
on garde l'objet de départ comme résultat
int length() : retourne la longueur de la chaîne
10
2.3. La classe StringBuffer
La classe StringBuffer offre des objets chaînes modifiables, càd des chaînes
dont on peut changer des morceaux, dont on peut changer la taille, …
Contrairement à la classe String, il n'est pas possible d'utiliser l'opérateur + (et
+=) avec les objets de cette classe. Lorsqu'un objet du type StringBuffer est
construit, un tableau de caractères est alloué dans l'objet. Sa taille initiale est de
16, mais si l'on ajoute plus de 16 caractères dans l'objet, un nouveau tableau,
plus grand est alloué (les caractères sont recopiés de l'ancien tableau vers le
nouveau et l'ancien tableau est détruit).
12