Plateformes Java
Java SE (Standard Edition) sert au développement d'applications de bureau et sert de fondation aux autres éditions. Java ME (Micro Edition), autrefois destiné aux appareils embarqués, est désormais obsolète face à Android et iOS. Java EE (Enterprise Edition) est conçu pour le développement web, englobant les pages web et les serveurs backend.
JVM, JRE, JDK : Rôles et Relations
Le JDK (Java Development Kit) fournit les outils nécessaires pour coder et compiler des programmes Java, incluant le JRE (Java Runtime Environment). Le JRE offre l'environnement d'exécution avec la JVM (Java Virtual Machine) et les bibliothèques système. La JVM interprète les fichiers bytecode (fichiers .class) pour l'exécution. La hiérarchie est : JDK contient JRE, qui contient JVM.
Interopérabilité de Java
L'interopérabilité permet aux applications Java de fonctionner sur différents systèmes d'exploitation comme Windows, Linux ou macOS. Cela est rendu possible en installant une JVM adoptée à chaque plateforme.
Littéraux en Java
Les littéraux représentent des valeurs constantes écrites directement dans le code. Le mécanisme d'optimisation des constantes en Java intervient lors de la compilation pour simplifier les expressions.
Optimisation des Constantes pour byte, short et char
Ces types subissent une conversion implicite vers int lors des opérations. Ainsi, l'assignation directe d'une opération entre variables provoque une erreur, comme illustré ci-dessous :
byte x = 20;
byte y = 15;
byte z = x + y; // Erreur de compilation
Cependant, si seuls des littéraux sont impliqués, l'optimisation évite cette erreur :
byte w = 6 + 7; // Pas d'erreur, compilé en byte
Optimisation des Constantes pour String
Lorsque des chaînes de caractères constantes sont concaténées, la compilation les fusionne automatiquement :
String str1 = "xyz";
String str2 = "x" + "y" + "z"; // Devient "xyz" après compilation
System.out.println(str1 == str2); // Affiche true
Types de Données
Les types de données se divisent en types primitifs (comme int, double) et types de référence (tableaux, classes, interfaces).
Conversions de Type
La conversion implicite se produit automatiquement lorsque des types de données compatibles sont utilisés, par exemple lors d'opérations arithmétiques. La conversion explicite (ou forcée) est nécessaire lors de l'assignation d'un type à une portée plus large vers un type à portée plus restreinte, avec un risque de perte de précision. Les littéraux peuvent être exprimés en différentes bases : décimal (par défaut), binaire (préfixe 0b), octal (préfixe 0), hexadécimal (préfixe 0x). En interne, les données sont stockées en binaire et les calculs utilisent le complément à deux.
Opérateurs
Les opérateurs de comparaison == comparent les valeurs pour les types primitifs et les adresses pour les types de référence. Les opérateurs d'affectation étendus comme +=, -= incluent une conversion implicite de type. Les opérateurs logiques & et | évaluent toujours les deux côtés, tandis que && et || utilisent l'évaluation court-circuit. Les opérateurs de décalage à droite >> préservent le signe en complétant avec le bit de signe, tandis que >>> effectue un décalage logique en complétant avec des zéros. La priorité des opérateurs suit un ordre prédéfini pour déterminer l'évaluation des expressions.