📘 Le cours : démarrer avec Java
Java est un langage compilé vers du bytecode, exécuté par la machine virtuelle Java (JVM) : le même programme tourne sur Windows, macOS et Linux. Il est très utilisé en entreprise, pour les applications Android et dans l'enseignement de la programmation orientée objet.
De la source à l'exécution
- Écris le code dans
Bonjour.java (le nom du fichier est celui de la classe publique, majuscules comprises).
- Compile :
javac Bonjour.java produit Bonjour.class, du bytecode.
- Exécute :
java Bonjour (sans extension). Depuis Java 11, java Bonjour.java compile et lance en une seule commande.
Bonjour.java ──► javac ──► Bonjour.class ──► JVM (commande java) ──► résultat
(code source) (compilateur) (bytecode) (interprète + optimise)
Que veut dire public static void main(String[] args) ?
| Mot | Rôle |
public | la méthode est visible depuis l'extérieur de la classe (la JVM doit pouvoir l'appeler) |
static | elle appartient à la classe elle-même : la JVM peut l'appeler sans créer d'objet |
void | elle ne renvoie aucune valeur |
String[] args | les arguments donnés après java Bonjour sur la ligne de commande |
Au début, recopie cette ligne telle quelle : les chapitres sur les méthodes et la POO expliquent chaque mot.
Les types primitifs
| Type | Taille | Valeurs |
byte | 8 bits | de −128 à 127 |
short | 16 bits | de −32 768 à 32 767 |
int | 32 bits | environ ±2,1 milliards |
long | 64 bits | environ ±9,2 × 10¹⁸ (suffixe L) |
float | 32 bits | réel, ~7 chiffres (suffixe f) |
double | 64 bits | réel, ~15 chiffres |
boolean | — | true ou false |
char | 16 bits | un caractère Unicode |
Les tailles sont les mêmes sur toutes les machines (contrairement au C). Un int qui dépasse 2 147 483 647 repasse aux valeurs négatives, sans erreur : c'est le complément à deux du chapitre Entiers signés.
Opérateurs, division entière et conversions
Java convertit tout seul vers un type plus *grand* (int vers double), mais pas l'inverse : il faut un cast (int) qui tronque la partie décimale. Un char est aussi un petit entier : 'A' + 1 vaut 66.
public class Calculs {
public static void main(String[] args) {
System.out.println(7 / 2);
System.out.println(7 % 2);
System.out.println(7 / 2.0);
System.out.println((double) 7 / 2);
int n = 'A' + 1; // un char est aussi un petit entier
System.out.println(n);
System.out.println((char) n);
}
}
Affichage3
1
3.5
3.5
66
B
Afficher : print, println, printf
println ajoute un retour à la ligne, print non. printf formate comme en C (%d entier, %f réel, %s texte) ; %n donne un retour à la ligne adapté au système. L'opérateur + concatène quand un des deux côtés est un String, et il s'évalue de gauche à droite.
public class Affichage {
public static void main(String[] args) {
String nom = "Lina";
double moyenne = 14.5;
System.out.print("Bonjour ");
System.out.println(nom);
System.out.printf("%s a %d ans%n", nom, 17);
System.out.println("moyenne : " + moyenne);
System.out.println("a" + 1 + 2);
System.out.println(1 + 2 + "a");
}
}
AffichageBonjour Lina
Lina a 17 ans
moyenne : 14.5
a12
3a
printf et la virgule
printf suit la langue du système : sur un ordinateur en français, System.out.printf("%.2f", 14.5) affiche 14,50 (virgule). Pour forcer le point, écris System.out.printf(Locale.US, "%.2f", 14.5) (avec import java.util.Locale;). println et la concaténation + affichent toujours le point.
Lire au clavier avec Scanner
La classe Scanner (paquetage java.util, à importer) lit ce que l'utilisateur tape : nextLine() une ligne entière, nextInt() un entier, nextDouble() un réel.
import java.util.Scanner;
public class Saisie {
public static void main(String[] args) {
Scanner clavier = new Scanner(System.in);
System.out.print("Ton prenom ? ");
String prenom = clavier.nextLine();
System.out.print("Ton age ? ");
int age = clavier.nextInt();
System.out.println(prenom + ", tu as " + age + " ans.");
clavier.close();
}
}
Si tu tapes Lina puis 17Ton prenom ? Lina
Ton age ? 17
Lina, tu as 17 ans.
Java protège mieux que C
Une variable locale non initialisée n'est pas tolérée : int x; System.out.println(x); ne compile pas (« variable might not have been initialized »). Les tableaux et les attributs reçoivent, eux, une valeur par défaut (0, false, null).