Bases
Hello World
public class Main { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Compiler et exécuter
javac Main.java # compiler java Main # exécuter java Main.java # fichier unique (Java 11+)
Conventions de nommage
ClassNamePascalCase pour les classes et interfaces
methodNamecamelCase pour les méthodes et variables
CONSTANT_NAMEUPPER_SNAKE pour les constantes
com.example.pkgDomaine inversé en minuscules pour les paquets
Types de données
Primitives
byteSigné 8 bits (-128 à 127)
shortSigné 16 bits
intSigné 32 bits (entier par défaut)
longSigné 64 bits (suffixe L)
floatIEEE-754 32 bits (suffixe f)
doubleIEEE-754 64 bits (décimal par défaut)
booleantrue / false
charCaractère Unicode 16 bits
Chaînes de caractères
String s = "hello"; String joined = s + " world"; // concaténation int len = s.length(); String sub = s.substring(0, 3); // "hel" boolean eq = s.equals("hello"); // égalité de contenu
Transtypage
int i = (int) 3.14; // cast réducteur double d = i; // élargissement (auto) int n = Integer.parseInt("42"); // chaîne vers entier String s = String.valueOf(42); // entier vers chaîne
Tableaux
int[] nums = {1, 2, 3}; String[] names = new String[5]; int[][] matrix = new int[3][4]; Arrays.sort(nums);
Flux de contrôle
If / Else
if (x > 0) { System.out.println("positive"); } else if (x == 0) { System.out.println("zero"); } else { System.out.println("negative"); }
Switch
// Traditionnel switch (day) { case "Mon": doWork(); break; case "Sat": case "Sun": rest(); break; default: routine(); } // Expression switch (Java 14+) String type = switch (day) { case "Sat", "Sun" -> "weekend"; default -> "weekday"; };
Boucles
for (int i = 0; i < 10; i++) { } for (String s : list) { } // for amélioré while (condition) { } do { } while (condition);
Méthodes
Définition
public static int add(int a, int b) { return a + b; }
Varargs et surcharge
static int sum(int... nums) { int total = 0; for (int n : nums) total += n; return total; } // sum(1, 2) sum(1, 2, 3) les deux fonctionnent
Modificateurs d'accès
publicAccessible de partout
protectedMême paquet + sous-classes
(default)Même paquet uniquement (pas de mot-clé)
privateMême classe uniquement
Classes et objets
Définition de classe
public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } }
Records (Java 16+)
public record Point(double x, double y) { // auto : constructeur, accesseurs, equals, hashCode, toString public double distance() { return Math.sqrt(x * x + y * y); } }
Static et Final
staticAppartient à la classe, pas à l'instance
final fieldNe peut pas être réaffecté après initialisation
final methodNe peut pas être surchargé
final classNe peut pas être sous-classé
Héritage
Extends
public class Animal { public void speak() { System.out.println("..."); } } public class Dog extends Animal { @Override public void speak() { System.out.println("Woof!"); } }
Classes abstraites
public abstract class Shape { abstract double area(); public void describe() { System.out.println("Area: " + area()); } }
Concepts clés
superAppeler le constructeur ou la méthode du parent
@OverrideVérification de surcharge à la compilation
instanceofVérification de type à l'exécution
sealed (17+)Restreindre les classes pouvant étendre
Interfaces
Définition
public interface Printable { void print(); // abstraite default String format() { // méthode par défaut return toString(); } static Printable of(String s) { // méthode statique return () -> System.out.println(s); } }
Implémentation
public class Report implements Printable, Serializable { @Override public void print() { System.out.println("Report"); } }
Interfaces fonctionnelles
Runnable() -> void
Supplier<T>() -> T
Consumer<T>T -> void
Function<T,R>T -> R
Predicate<T>T -> boolean
Comparator<T>(T, T) -> int
Collections
List
List list = new ArrayList<>(); list.add("a"); list.get(0); // "a" list.size(); // 1 List immutable = List.of("a", "b", "c");
Map
Map map = new HashMap<>(); map.put("key", 42); map.getOrDefault("key", 0); // 42 map.containsKey("key"); // true map.forEach((k, v) -> { });
Set
Set set = new HashSet<>(); set.add("a"); set.contains("a"); // true Set immutable = Set.of("a", "b", "c");
Implémentations courantes
ArrayListTableau redimensionnable, accès aléatoire rapide
LinkedListDoublement chaîné, insertion/suppression rapide
HashMapTable de hachage, get/put O(1)
TreeMapTrié par clé, O(log n)
HashSetÉléments uniques, recherche O(1)
LinkedHashMapHashMap ordonné par insertion
Gestion des exceptions
Try / Catch / Finally
try { int result = 10 / 0; } catch (ArithmeticException e) { System.err.println(e.getMessage()); } finally { // toujours exécuté }
Try-with-resources
try (var reader = new BufferedReader(new FileReader(path))) { String line = reader.readLine(); } // ferme automatiquement reader
Hiérarchie des exceptions
ThrowableRacine de toutes les erreurs et exceptions
ErrorProblèmes graves (OutOfMemoryError)
ExceptionExceptions vérifiées (à gérer obligatoirement)
RuntimeExceptionNon vérifiées (NullPointer, IndexOutOfBounds)
Exception personnalisée
public class AppException extends Exception { public AppException(String msg) { super(msg); } public AppException(String msg, Throwable cause) { super(msg, cause); } }
Streams et lambdas
Syntaxe lambda
Comparator byLen = (a, b) -> a.length() - b.length(); Runnable task = () -> System.out.println("run"); Function len = String::length; // référence de méthode
Pipeline de stream
List result = names.stream() .filter(n -> n.length() > 3) .map(String::toUpperCase) .sorted() .collect(Collectors.toList());
Opérations de stream courantes
.filter(pred)Garder les éléments correspondant au prédicat
.map(func)Transformer chaque élément
.flatMap(func)Mapper et aplatir les streams imbriqués
.sorted()Trier (naturel ou avec Comparator)
.distinct()Supprimer les doublons
.limit(n)Prendre les n premiers éléments
.collect()Terminal : rassembler dans une collection
.forEach()Terminal : effectuer une action sur chaque élément
.reduce()Terminal : combiner en une seule valeur
.count()Terminal : compter les éléments
Génériques
Classe et méthode générique
public class Box { private T value; public Box(T value) { this.value = value; } public T get() { return value; } } public static List listOf(T... items) { return List.of(items); }
Types bornés et wildcards
<T extends Number>T doit être Number ou sous-classe
<T extends A & B>Bornes multiples (classe + interfaces)
<?>Type inconnu (lecture seule)
<? extends T>Wildcard borne supérieure (producteur)
<? super T>Wildcard borne inférieure (consommateur)
Optional et Java moderne
Optional
Optional opt = Optional.ofNullable(getValue()); String result = opt.orElse("default"); opt.ifPresent(v -> System.out.println(v)); String upper = opt.map(String::toUpperCase).orElse("");
Text Blocks (Java 15+)
String json = """ { "name": "Alice", "age": 30 } """;
Utilitaires utiles
var (10+)Inférence de type de variable locale
record (16+)Classe porteuse de données immuables
sealed (17+)Hiérarchies de classes restreintes
pattern matching (21+)instanceof avec cast automatique
virtual threads (21+)Threads légers via Thread.ofVirtual()