Académique Documents
Professionnel Documents
Culture Documents
DÉCLARATION DE VARIABLES
DÉCLARATION DE VARIABLES
LES OPÉRATEURS D'ASSIGNATION ET D'INCRÉMENTATION
LES OPÉRATEURS D'ASSIGNATION ET D'INCRÉMENTATION
LES OPÉRATEURS DE COMPARAISON
LES OPÉRATEURS LOGIQUES
(BOOLÉENS)
LES OPÉRATEURS BIT-À-BIT
LECTURE/ÉCRITURE DANS UNE
VARIABLE
TRAITEMENT CONDITIONNEL
OPÉRATEUR TERNAIRE
CHOIX MULTIPLES: SWITCH
INSTRUCTION RÉPÉTITIVE / WHILE
INSTRUCTION RÉPÉTITIVE / BOUCLE
IMBRIQUÉE
INSTRUCTION RÉPÉTITIVE / DO
INSTRUCTION RÉPÉTITIVE / FOR
INSTRUCTION BREAK
INSTRUCTION CONTINUE
INSTRUCTION CONTINUE
EXERCICES D’APPLICATION
● TABLEAUX
monTableau[5] = 23;
L'indexation démarre à partir de 0, ce qui veut dire que, pour un tableau de N éléments, la numérotation va de 0 à N-1.
Dans l'exemple ci-dessus, la 6ème case contient donc la valeur 23.
Nous pouvons également créer un tableau en énumérant son contenu :
int [] monTableau = {5,8,6,0,7};
Attention néanmoins, la variable element contient une copie de monTableau[i]. Avec des tableaux contenant des variables
primitives, toute modification de élément n'aura aucun effet sur le contenu du tableau.
// Vaine tentative de remplir tous les éléments du tableau avec la valeur 10
for(int élément : monTableau)
{ élément = 10;
// Ou plus court :
} Arrays.fill(monTableau, 10);
// La bonne méthode :
for(int i=0 ; i<monTableau.length ; i++) Pour éviter de modifier la variable, utilisez le mot-clé final :
{ monTableau[i] = 10;} for (final int élément : monTableau)
{
TABLEAUX
La première version montre qu'il est possible de créer un tableau de tableaux n'ayant pas forcément tous la même dimension.
On peut également remplir le tableau à la déclaration et laisser le compilateur déterminer les dimensions des tableaux, en imbriquant les accolades :
int[][] matrice =
{
{ 0, 1, 4, 3 } , // tableau [0] de int
{ 5, 7, 9, 11, 13, 15, 17 } // tableau [1] de int
};
TABLEAUX
De la même manière que précédement, on peut facilement parcourir tous les éléments d'un tableau :
for (int i=0 ; i<matrice.length ; i++)
{
for (int j=0 ; j<matrice[i].length ; j++)
{
//Action sur matrice[i][j]
}
}
TABLEAUX
De la même manière que précédement, on peut facilement parcourir tous les éléments d'un tableau :
for (int i=0 ; i<matrice.length ; i++)
{
for (int j=0 ; j<matrice[i].length ; j++)
{
//Action sur matrice[i][j]
}
}
POO: La visibilité de vos membres dans une classe
Si vous définissez un membre (attribut, méthode...) public il sera alors accessible de n'importe
ou dans le programme. La classe aura donc accès à ce membre, mais aussi n'importe quelle
autre classe.
public class Demo {
}
POO: La visibilité de vos membres dans une classe
Un membre marqué dans une classe comme étant protégé (mot clé protected) peut être
manipulé :
class Shape {
protected Point center = new Point(); // Essayez avec un private => Ko
}
class Circle extends Shape {
public Circle() {
super();
System.out.println( "Center == " + this.center );
}
}
public class Sample {
En l'absence de mot clé pour spécifier la visibilité, un membre sera considéré comme étant «
package private » (on peut simplifier en parlant de visibilité package). C'est donc le mode de
visibilité par défaut (absence de mot clé). Cela veut dire que le membre sera accessible par
tout code Java localisé dans le même package. Voici un exemple d'utilisation.
package fr.koor.sample;
}
POO: La visibilité de vos membres dans une classe
Si une autre classe du même package essaye d'utiliser la classe TestVisibility, elle aura
accès aux membres de type « package private » (mais aussi aux membres protégés et
publics). Voici un exemple de code.
package fr.koor.sample;
}
POO: La visibilité de vos membres dans une classe
Dans ce dernier cas, seule la classe ayant définit le membre pourra y accéder.
package fr.koor.sample;
}
}
POO: La visibilité de vos membres dans une interface
Les règles pour une interface ne sont pas les mêmes que pour les classes. En premier lieu, en l'absence de mot clé,
un membre d'interface est implicitement public. Cela implique de la visibilité « package private » n'est pas possible
pour un membre d'interface. Au passage, la visibilité protected n'est pas supportée non plus.
package fr.koor.sample;
public interface Demo {
public abstract void doSomething();
public abstract void doAnother();
}
POO: Changement de visibilité en cas de redéfinition de méthodes
En cas de redéfinition de méthodes (héritage ou implémentation d'interface), il est possible de modifier la visibilité de
ces méthodes. Mais attention, vous devez respecter une règle : vous pouvez ouvrir la visibilité et non pas la
restreindre.
Par exemple, la classe Object définie la méthode clone permettant de cloner un objet : cette méthode est déclarée
comme étant protected. Si vous souhaitez redéfinir cette méthode pour permettre le clonage de vos instances, vous
pouvez « ouvrir » sa visibilité et la rendre publique. Voici un exemple concret.
package fr.koor.sample;
public class Matrix extends Object {
Pour rappel, vous pouvez définir qu'une seule classe publique par fichier. Cette classe publique doit
avoir très exactement le même nom que celui du fichier (sans l'extension, bien entendu) et de
manière « case sensitive ». Une classe publique est accessible en tout point de votre programme
Java. Je ne reviendrais pas plus sur cette possibilité, on en parle déjà depuis le début de ce tutoriel
Java.
POO:La visibilité des vos classes
Les classes « package private »
Un fichier de code Java peut contenir bien plus qu'une seule définition de classe. Mais, outre la
classe publique, les autres seront considérés comme des classes restreintes au package dans
lequel est placé le fichier. Elles ne devront porter aucun qualificateur de visibilité.
package fr.koor.sample;
// Classe visible uniquement dans le package fr.koor.sample.
class PrivateClass {
public PrivateClass() {
System.out.println( "PrivateClass constructor" );
}}
// Classe publique visible dans tout le projet.
public class Sample {
public Sample() {
PrivateClass obj = new PrivateClass();
// TODO
}}
POO:La visibilité des vos classes
La visibilité des classes internes (inner classes)
Une classe interne est une classe définie à l'intérieur d'une autre classe. Si elle est définie sous
forme de membre de la classe portante, alors vous pourrez utiliser un des quatre niveaux de
visibilité classiques : public, protected, package private, private. Voici un exemple de définition
d'une classe interne.
package fr.koor.sample;
public class OuterClass {
super() est utilisé pour appeler le constructeur de la classe de base (classe parent).
static signifie que quelque chose est directement lié à une classe :
Par conséquent, tu peux utiliser le nom de la classe pour appeler une méthode static ou référencer un champ
static.
Par exemple,
si le champ count est static dans la classe Counter, tu peux référencer la variable avec l'expression suivante :
Counter.count.
POO: static
● Tu ne peux PAS accéder aux membres non static d'une classe dans un contexte static, comme une méthode
ou un bloc static. La compilation du code ci-dessous générera une erreur :
● Un autre point important est que vous ne pouvez pas remplacer (@Override) les méthodes statiques. Si
vous déclarez une telle méthode dans une subclass, c'est-à-dire une méthode avec le même nom et la
même signature, vous "cachez" simplement la méthode de la superclass au lieu de la remplacer. Ce
phénomène est connu sous le nom method hiding. Cela signifie que si une méthode static est déclarée à
la fois dans la classe parent et la classe enfant, la méthode appelée sera toujours celle du type de la
variable au moment de la compilation. Contrairement à ce qui arrive avec le remplacement de méthode,
ces méthodes ne seront pas exécutées lors de l'exécution du programme.
Prenons un exemple :
class Vehicle {
public static void kmToMiles(int km) {
System.out.println("Inside the parent class"); public class Demo {
}} public static void main(String args []) {
class Car extends Vehicle { Vehicle v = new Car();
public static void kmToMiles(int km) {
v.kmToMiles(10);
System.out.println("Inside the child class");
}}
}}
POO: final
Un attribut peut être déclaré comme final. Cela signifie qu’il n’est plus possible d’affecter une valeur à cet attribut une fois qu’il a
été initialisé. Dans cas, le compilateur exige que l’attribut soit initialisé explicitement.
final porte sur l’attribut et empêche sa modification. Par contre si l’attribut est du type d’un objet, il est possible de modifier l’état
de cet objet.
}
POO:Class Object
Java est un langage qui ne supporte que l’héritage simple. L’arborescence d’héritage est un arbre dont la racine est la
classe Object. Si le développeur ne précise pas de classe parente dans la déclaration d’une classe, alors la classe
hérite implicitement de Object.
La classe Object fournit des méthodes communes à toutes les classes. Certaines de ces méthodes doivent être
redéfinies dans les classes filles pour fonctionner correctement.
● La méthode equals: En Java, l’opérateur == sert à comparer les références. Il ne faut donc jamais l’utiliser pour
comparer des objets. La comparaison d’objets se fait grâce à la méthode equals héritée de la classe Object.
● La méthode hashCode:La méthode hashCode est fournie pour l’utilisation de certains algorithmes, notamment pour
l’utilisation de table de hachage. Le principe d’un algorithme de hachage est d’associer un identifiant à un objet. Cet
identifiant doit être le même pour la durée de vie de l’objet. De plus, deux objets égaux doivent avoir le même code de
hachage.
● La méthode toString:La méthode toString est une méthode très utile, notamment pour le débugage et la production de
log. Elle permet d’obtenir une représentation sous forme de chaîne de caractères d’un objet.
● La méthode finalize:La méthode finalize est appelée par le ramasse-miettes avant que l’objet ne soit supprimé et la
mémoire récupérée. Redéfinir cette méthode donne donc l’opportunité au développeur de déclencher un traitement avant
que l’objet ne disparaisse.
● La méthode getClass: La méthode getClass permet d’accéder à l’objet représentant la classe de l’instance.
POO:Class Object
● La méthode clone:La méthode clone est utilisée pour cloner une instance, c’est-à-dire obtenir une copie d’un objet. Par
défaut, elle est déclarée protected car toutes les classes ne désirent pas permettre de cloner une instance.
Pour qu’un objet soit clonable, sa classe doit implémenter l’interface marqueur Cloneable. L’implémentation par défaut de
la méthode dans Object consiste à jeter une exception CloneNotSupportedException si l’interface Cloneable n’est pas
implémentée. Si l’interface est implémentée, alors la méthode crée une nouvelle instance de la classe et affecte la même
valeur que l’instance d’origine aux attributs de la nouvelle instance. L’implémentation par défaut de clone n’appelle pas les
constructeurs pour créer la nouvelle instance.
RQ:Par défaut, tous les tableaux implémentent l’interface Cloneable et redéfinissent la méthode clone afin de la rendre public.
On peut donc directement cloner des tableaux en Java si on désire en obtenir une copie.
En Java, les chaînes de caractères sont des instances de la classe String. Les chaînes de caractères
écrites littéralement sont toujours délimitées par des guillemets :
"Hello World"
Contrairement à d’autres langages de programmation, une chaîne de caractères ne peut pas être
traitée comme un tableau. Si on souhaite accéder à un caractère de la chaîne à partir de son
index, il faut utiliser la méthode String.charAt. On peut ainsi parcourir les caractères d’une chaîne
String.equalsIgnoreCase: Comme la méthode précédente sauf que deux chaînes qui ne diffèrent que par
la casse seront considérées comme identiques.
String.concat :Concatène les deux chaînes dans une troisième. Cette méthode est équivalente à l’utilisation
de l’opérateur +.
String.substring: Crée une nouvelle sous-chaîne à partir de l’index de début et jusqu’à l’index de fin (non
inclus).
String.trim: Crée une nouvelle chaîne de caractères en supprimant les espaces au début et à la fin.
POO:Les exception
La gestion des cas d’erreur représente un travail important dans la programmation. Les sources d’erreur
peuvent être nombreuses dans un programme. Il peut s’agir :
● d’une défaillance physique ou logiciel de l’environnement d’exécution. Par exemple une erreur
survient lors de l’accès à un fichier ou à la mémoire.
● d’un état atteint par un objet qui ne correspond pas à un cas prévu. Par exemple si une opération
demande à positionner une valeur négative alors que cela n’est normalement pas permis par la
spécification du logiciel.
● d’une erreur de programmation. Par exemple, un appel à une méthode est réalisé sur une variable
dont la valeur est null.
● et bien d’autres cas encore…
POO:Les exception
Une exception est une classe Java qui représente un état particulier et qui hérite directement ou indirectement de la classe
Exception.
NullPointerException
NumberFormatException
IndexOutOfBoundsException