Cours Complet : Programmation en Java
1. Introduction et Philosophie
Créé par Sun Microsystems en 1995, Java est un langage de programmation
strictement orienté objet, sécurisé et portable. Sa devise "Write Once, Run Anywhere"
(Écrire une fois, exécuter partout) illustre son indépendance vis-à-vis des systèmes
d'exploitation.
Cette portabilité est rendue possible grâce à la Machine Virtuelle Java (JVM). Le
compilateur Java transforme le code source en bytecode, et la JVM interprète ce
bytecode sur la machine de destination.
2. Structure de Base
En Java, tout le code doit résider dans une classe. Le nom du fichier source doit
correspondre exactement au nom de la classe publique. Le point d'entrée d'un
programme Java est la méthode 'main'.
public class HelloWorld {
public static void main(String[] args) {
[Link]("Bonjour le monde !");
}
}
3. Variables et Types de Données
Java est un langage à typage fort. Les types primitifs (int, double, boolean, char) gèrent
les données simples en optimisant la mémoire, tandis que les types objets (comme
String ou vos propres classes) offrent des méthodes supplémentaires.
int age = 30;
double salaire = 4500.50;
boolean estActif = true;
String nom = "Bob";
4. Programmation Orientée Objet (POO)
Les concepts fondamentaux de la POO en Java sont l'encapsulation (via les
modificateurs private/public et les getters/setters), l'héritage (via le mot-clé extends) et
le polymorphisme.
public class Vehicule {
public void demarrer()
{ [Link]("Démarrage"); }
}
public class Voiture extends Vehicule {
@Override
public void demarrer() { [Link]("Vroum !"); }
}
5. Interfaces et Classes Abstraites
Contrairement au C++, Java n'autorise pas l'héritage multiple de classes. Pour
contourner cette limite, il utilise les interfaces (implements). Une interface définit un
contrat : toutes les méthodes déclarées doivent être implémentées par la classe.
public interface Volant {
void voler();
}
public class Oiseau implements Volant {
public void voler() { [Link]("L'oiseau vole");
}
}
6. Collections (Java Collections Framework)
Le framework Collections remplace les tableaux classiques lorsqu'on a besoin de tailles
dynamiques. Il inclut les interfaces List (ArrayList), Set (HashSet) et Map (HashMap).
import [Link];
import [Link];
List<String> liste = new ArrayList<>();
[Link]("Java");
[Link]("Python");
7. Gestion des Exceptions
Java distingue deux types d'exceptions : les checked exceptions (vérifiées à la
compilation, comme IOException) et les unchecked exceptions (erreurs d'exécution
comme NullPointerException). Les exceptions se gèrent avec try-catch-finally.
try {
int resultat = 10 / 0;
} catch (ArithmeticException e) {
[Link]("Erreur : Division par zéro");
} finally {
[Link]("Fin du traitement");
}
8. Programmation Multithread
Java intègre nativement la gestion de tâches concurrentes (multithreading). Vous
pouvez exécuter du code en parallèle en implémentant l'interface Runnable ou en
héritant de la classe Thread. Le mot-clé synchronized protège les données partagées.
Thread t1 = new Thread(() -> {
[Link]("Thread en cours");
});
[Link]();
9. Fonctionnalités Modernes (Lambdas et Streams)
Depuis Java 8, le langage prend en charge un style fonctionnel grâce aux expressions
lambda et à l'API Stream. Ces ajouts simplifient considérablement le traitement et le
filtrage des collections.
List<Integer> nombres = [Link](1, 2, 3, 4, 5);
[Link]()
.filter(n -> n % 2 == 0)
.forEach([Link]::println);
10. Gestion de la Mémoire (Garbage Collector)
Vous ne libérez jamais la mémoire explicitement en Java. Le Garbage Collector
(ramasse-miettes) s'exécute en arrière-plan pour détecter et supprimer les objets qui ne
sont plus référencés, libérant le développeur de la gestion de mémoire manuelle.