Java Cours II
Java Cours II
// 5. Instructions du programme
[Link]("Bonjour, monde !");
}
}
public class Point
{
Encapsulation des
private int x ; //
private int y ; // données (private)
attribut : propre à chaque instance // Variable d’instance
attribut : propre à chaque instance // Variable d’instance
}
L'encapsulation est un concept de programmation orientée objet qui consiste à cacher les
détails internes d'une classe et à ne permettre l'accès aux données qu'à travers des
méthodes publiques (getters et setters).
Cela garantit que les données sont modifiées uniquement de manière contrôlée.
Comment utilisé la classe Point constructeur
Soit la classe Point Depuis un autre classe
dispose de la méthode main()
Point a = new Point();
Réservation d’emplacement pour une L’emplacement pour l’objet
référence à un objet de type Point. proprement dit sera alloué sur une
demande explicite
public class Point
{
private int x ; //
private int y ; //
attribut : propre à chaque instance // Variable d’instance
attribut : propre à chaque instance // Variable d’instance
x
// Les méthodes de la classe
public void initialise (int abs, int ord) {x = abs ;y = ord ;} a
public void deplace
public Personne() {
this("inconnu"); // 'this' Appeler un autre constructeur dans la
même classe
}
}
doit être la première instruction
L’héritage
il permet de définir une nouvelle classe, dite classe dérivée,
à partir d’une classe existante dite classe de base.
extends
class Point {
public void initialise (int abs, int ord) { x = abs ; y = ord ; }
super-classe
public void deplace (int dx, int dy) { x += dx ; y += dy ; }
public void affiche () { [Link] (« coord" + x + " " + y) ; }
private int x, y ; les membres privés de la classe de base
} ne sont pas membres privés de la classe dérivée.
Point_color Point + couleur()
Un objet d’une classe dérivée accède aux membres publics de sa classe de base
Appels des constructeurs On peux pas combiner this() et super()
dans le même constructeur.
En Java, lorsqu’une classe hérite d’une autre, le constructeur de la classe mère est
appelé automatiquement AVANT celui de la classe fille.
class A { class A {
public A() { public A(String nom) {
S.o.p("Constructeur class A"); S.o.p("Constructeur class A : " + nom);
} }
} } Constructeur class A : ABC
class B extends A { Constructeur class B
public class B extends A {
public B() {
super(); public B() {
S.o.p("Constructeur class B"); super("ABC"); // Appelle explicitement le
} constructeur parent
} S.o.p("Constructeur class B");
Constructeur class A }
Constructeur class B public static void main(String[] args) {new B();}
}
Règle 1: Si un constructeur d’une classe dérivée appelle un constructeur d’une classe de base, il
doit obligatoirement s’agir de la première instruction du constructeur et ce dernier est
désigné par le mot-clé super.
CAS 3 : Classe A avec constructeur avec paramètre
CAS 1 : Classe A sans constructeur déclaré seulement
class A { class A {
// Aucun constructeur déclaré → Java en ajoute un vide public A(String nom) {…}
}
public class B extends A { public A() {…}
public B() {
super(); // Appelé automatiquement ici, même si tu ne }
l’écris pas
} class B extends A {
public B() {
CAS 2 : Classe A avec constructeur vide déclaré super("Bonjour"); // Obligatoire
class A {
public A() {…} super() automatique échoue car
} il n’existe pas de constructeur vide
public class B extends A { dans A
public B() {…}
} }
}
super
Le mot-clé super permet d'accéder aux membres (attributs et méthodes) d’une super-
classe (classe parente). Il est utilisé dans le contexte de l’héritage
Accéder à un constructeur de la super-classe : Accéder à une méthode ou un attribut de la super-
classe
class Personne { class Personne {
public Personne (String nom) { public int X=1;
[Link]("Personne: " + nom); public void affiche() {
} [Link]("class Personne ");
} }
}
class Etudiant extends Personne {
public Etudiant (String nom) { class Etudiant extends Personne {
public int X=2; //Duplication des champs
super(nom); // Appel au public void affiche() {
constructeur de la
super. affiche (); // Appel à la
super-classe
méthode de la super-classe
}
[Link](X +""+super.X);
}
}
}
class Point { Pointol P = new Pointol(); P.affiche_X();
class A {
public void f(int n) {} // méthode 1
public void f(float x) {} // méthode 2 (surcharge de f)
}
class B extends A {
public void f(int n) {} // méthode 3 (redéfinition de méthode 1)
public void f(double y) {} // méthode 4 (surcharge avec nouveau type)
}
final
Déclarer une constante :
Une fois qu'une variable est assignée avec final, sa valeur ne peut pas être modifiée.
final int MAX_AGE = 100; // La valeur de MAX_AGE ne peut pas être changée.
x=3 x=4
Point P
y=5 Point P y=8
color=‘D’
p de type Point contient la référence à un objet de type Point_Couleur
class Point class Point_Couleur extends Point
{ public Point (int x, int y) {} { public Point_Couleur (int x, int y, char color)
public void affiche () {} public void affiche () { ..... }
} }
abstract class A
{
}
Les classes abstraites
On peut définir des attributs et des constructeurs.
Les méthodes sont abstraites par défaut (sans implémentation), sauf si
elles sont marquées avec static.
abstract class A
{
String nom;
A (String nom) { [Link] = nom; }
//Les méthodes static appartiennent à la classe elle-même, pas à l’instance.
static void affiche() { S.o.p("Ceci est une classe abstract "); }
L’interface Comparable
public interface Comparable<T> {
public int compareTo(T o);
}
La méthode compareTo() permet de comparer l’objet courant (this) à l’objet o reçu en argument et
de renvoyer un entier
L’interface Comparable permet à une classe de définir son propre ordre naturel (tri).
@Override
public int compareTo(Personne autre) {
return [Link]([Link], [Link]); //tri par âge
//return [Link]([Link]); // Tri alphabétique
}
compareTo() : La méthode Compare les valeurs des Compare les références des
compareTo() est utilisée pour objets, c'est-à-dire si le objets, c'est-à-dire si deux
comparer deux objets qui contenu de deux objets est variables pointent vers le
implémentent l'interface identique (cela doit être même objet en mémoire.
Comparable. redéfini dans les classes
personnalisées).
Vient de l’interface Utilisé pour les types
Comparable<T>. String s1 = "abc"; primitifs et les objets.
String s2 = "abc";
[Link](s2)
La classe Object
En Java, toute classe hérite automatiquement (directement ou
indirectement) de la classe Object, même si ce n’est pas écrit explicitement.
class Personne { class Personne extends Object{
... ...
} }
equals(Object o) Vérifie l’égalité logique entre deux objets. Par défaut = ==.
toString() Retourne une représentation texte de l’objet.
public class Personne { public class Personne {
String nom; int age; String nom; int age;
} @Override
Personne P = new Personne (22, " ABC"); public String toString() { return nom + " " + age ; }
S.o.p(P ) [Link]@1c7c054 }
Personne P = new Personne (22, " ABC");
S.o.p(P ) ABC 22 S.o.p([Link]() )
Les tableaux
Un ensemble d’éléments de même type désignés par un nom unique, chaque élément étant
repéré par un indice précisant sa position au sein de l’ensemble
[Link] 0 1 2 3 A[0].length
for ( i= 0 ; i<[Link] ; i++){ 1 10 20 A[1].length
int [] [] t = new int [3][] ; // crée un tableau de trois références à des tableaux d’entiers et place sa référence dans t.
catch
} catch (ArithmeticException e) (NullPointerException
{ e) {
[Link]("Erreur : division par zéro !");: division par zéro !");
[Link]("Erreur
} finally { Exception in thread "main"
[Link]("Bloc finally exécuté.");
[Link]: / by zero
} at [Link]([Link])
[Link]("Out try/catch ..."); Bloc finally exécuté.
}
RuntimeException se produit
toujours en raison d’une erreur
de programmation
try {
FileReader f = new FileReader("[Link]");
try-with-resources
try (FileReader f = new FileReader("[Link]" ) )
} catch (IOException e) {
{
[Link]([Link]()); // lecture éventuelle ici
} } catch (IOException e) {
finally {
[Link]([Link]());
[Link]();
} }
[Link](); [Link]();
}
} catch (Exception e) { [Link](); }
le contenu ne soit pas entièrement écrit
finally {
dans le fichier (tampon non vidé), [Link]();
le fichier soit endommagé ou incomplet, }
sérialisation / désérialisation
La sérialisation en Java est le processus de conversion d'un objet en un flux d'octets pour
pouvoir être stocké dans un fichier, envoyé sur un réseau, ou enregistré dans une base de
données. Cette opération permet de sauvegarder l'état d'un objet et de le récupérer plus tard.
Une classe doit implémenter l'interface Serializable pour pouvoir être sérialisée.
LinkedList utilise une liste chaînée (chaque élément pointe vers le suivant). Elle est plus
performante pour les insertions et suppressions, mais l'accès à un élément par index est plus lent
car il faut parcourir la liste.
LinkedList<Object> M = new LinkedList<Object> () ;
LinkedList<String> M = new LinkedList<String> () ;
Un Iterator est une interface en Java qui permet de parcourir une collection de manière
sécurisée et flexible.
Elle permet de récupérer chaque élément de la collection sans avoir à utiliser un
index.
Aspect Iterator ListIterator
Direction de parcours Sens unique (avant) ➡️ Double sens (avant ➡️ et arrière ⬅️)
Méthodes disponibles hasNext(), next(), remove() hasNext(), next(), hasPrevious(),
previous(), add(), remove(), set()
Collections compatibles Toutes les collections (List, Set, etc.) Uniquement List
Positionnement Ne donne pas d’index Peut retourner l'index avec
nextIndex() et previousIndex()
Ajout ou modification Ne peut pas ajouter ou modifier (sauf Peut ajouter, modifier et supprimer
supprimer via remove()) des éléments pendant l'itération
ArrayList<String> M = new ArrayList<> () ;
[Link] ("A") ; next() next() next() next() next()
[Link] ("D") ; 0 1 2 3
[Link] ("C") ; Out of
A D C B
rang
[Link] ("B") ;
Iterator<String> I1= [Link](); ListIterator<String> I2=
[Link]();
while([Link]()) while([Link]())
{S.o.p( [Link]() );} {S.o.p( [Link]() );}
créer une ArrayList
mettre à jour un élément extraire une partie de la liste
ajoutez éléments
supprimer un élément comparer deux listes
parcourir tous les éléments
rechercher un élément
insérer un élément
copier une liste dans une autre
récupérer un élément
1. créer une ArrayList, ajoutez éléments (chaînes)
List <String> L = new ArrayList < String >();
ArrayList < String > L = new ArrayList < String >();
LinkedList < String > L = new LinkedList<>();
0 1 2 3 4 5
A B F D C E
2. parcourir tous les éléments de la liste0 1 2 3 4 5
A B F D C E
ArrayList < String > L = new ArrayList < String >();
ListIterator<String> I2 = [Link](2); OK
Iterator <String> I1 = [Link](X); Error
ListIterator<String> I2 = [Link](2);
while([Link]() ) {
[Link]([Link]() +" ");}
parcourir la liste dans l'ordre inverse
for (int i = [Link]() - 1; i >= 0; i--) { 0 1 2 3 4 5
[Link]([Link](i));
A B F D C E
ListIterator<String> I2 = [Link]([Link]());
while(I2. hasPrevious) {[Link](I2. previous() +" ");}
0 1 2 3 4 5 6
X A B F D C E
[Link](5, "Z");
0 1 2 3 4 5 6 7
X A B F D Z C E
4. récupérer un élément (à un index spécifié) à partir
de la liste.
0 1 2 3 4 5
A B F D C E
element = [Link](2);
[Link](" 3eme: "+element); 3eme: F
5. mettre à jour un élément par l'élément donné.
0 1 2 3 4 5
A B F D C E
[Link](3, "W");
0 1 2 3 4 5
A B F W C E
6. supprimer un élément de la liste
0 1 2 3 4 5
A B F D C E
[Link](2); remove(int index) — supprime à une position
0 1 2 3 4
A B D C E
[Link]( [Link](1) );
7. rechercher un élément dans la liste.
0 1 2 3 4 5
X B F X C X
boolean eq = [Link](list2);
0 1 2 0 1 2 0 1 2
6 2 3 6 2 3 6 2 3
0 1 2 0 1 2 0 1 2 3
6 2 3 6 3 2 6 2 3 4
Les Expression LAMBDA
Elle permet de simplifier le code au lieu d’écrire une classe anonyme
Toute lambda est liée à une interface fonctionnelle.
Une interface fonctionnelle est une interface qui contient une seule méthode abstraite.
return [Link]();
return [Link](x);
}
}; [Link]( A. sum(4));
[Link]( A. sum(4));
implémenter une expression lambda pour concaténer deux chaînes.
interface Calculer {String sum(String x, String y);}
Calculer A = new Calculer () {
@Override
Calculer A = (x,y) -> x+y;
public String sum (String x, String y) {
return x+y;
}
}; String S1 = "ABC ";
String S1 = "ABC "; String S2 = "EFG ";
String S2 = "EFG ";
[Link]( A. sum(s1,s2));
[Link]( A. sum(s1,s2));
世界に痛みを 神羅天征
[Link]