Essayer de coder ← Retour aux sujets

Un premier programme

public class

En Java, tout le code vit dans une classe. L'exécution commence à la méthode main. Le fichier porte le nom de la classe publique : Bonjour.java.

public class Bonjour { … }
Une classe ; le fichier s'appelle Bonjour.java
public static void main(String[] args)
Point d'entrée du programme
System.out.println("Salut");
Affiche puis passe à la ligne
System.out.print("a");
Affiche sans passer à la ligne
// note /* note */
Commentaires sur une ligne / sur plusieurs
Bonjour.java
public class Bonjour {
    public static void main(String[] args) {
        System.out.println("Bonjour NSI !");
    }
}
Affichage
Bonjour NSI !

Types et variables

int · double · boolean

Java est fortement typé : chaque variable a un type, vérifié à la compilation. Il existe 8 types primitifs ; String est une classe.

int age = 17;
Entier (32 bits)
long grand = 10_000_000_000L;
Grand entier (64 bits), suffixe L
double taille = 1.78;
Réel (64 bits)
boolean ok = true;
Booléen : true ou false
char c = 'A';
Un caractère, entre apostrophes
String nom = "Lina";
Chaîne de caractères, entre guillemets
final int MAX = 100;
Constante : on ne peut plus la modifier
var n = 5;
Type déduit par le compilateur (Java 10 et plus)
Types.java
public class Types {
    public static void main(String[] args) {
        int age = 17;
        double taille = 1.78;
        boolean majeur = age >= 18;
        String nom = "Lina";

        System.out.println(nom + " a " + age + " ans, majeur : " + majeur);
        System.out.println("taille : " + taille + " m");
    }
}
Affichage
Lina a 17 ans, majeur : false
taille : 1.78 m

Opérateurs et conversions

/ % cast

Entre deux entiers, / est une division entière. Une conversion vers un type plus petit doit être demandée explicitement.

7 / 2
3 (division entière)
7 % 2
1 (reste)
7 / 2.0
3.5 (un opérande réel suffit)
(double) a / b
Cast : convertit a avant la division
int x = (int) 3.9;
Conversion « vers le bas » : x vaut 3 (partie entière)
a++ a-- a += 2
Incrémenter, décrémenter, raccourcis

📘 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

  1. Écris le code dans Bonjour.java (le nom du fichier est celui de la classe publique, majuscules comprises).
  2. Compile : javac Bonjour.java produit Bonjour.class, du bytecode.
  3. 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) ?

MotRôle
publicla méthode est visible depuis l'extérieur de la classe (la JVM doit pouvoir l'appeler)
staticelle appartient à la classe elle-même : la JVM peut l'appeler sans créer d'objet
voidelle ne renvoie aucune valeur
String[] argsles 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

TypeTailleValeurs
byte8 bitsde −128 à 127
short16 bitsde −32 768 à 32 767
int32 bitsenviron ±2,1 milliards
long64 bitsenviron ±9,2 × 10¹⁸ (suffixe L)
float32 bitsréel, ~7 chiffres (suffixe f)
double64 bitsréel, ~15 chiffres
boolean—true ou false
char16 bitsun 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.

Calculs.java
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);
    }
}
Affichage
3
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.

Affichage.java
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");
    }
}
Affichage
Bonjour 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.

Saisie.java
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 17
Ton 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).

⚠️ Erreurs fréquentes

Un nom de fichier différent du nom de la classe

Si la classe publique s'appelle Bonjour, le fichier doit s'appeler exactement Bonjour.java. Sinon javac répond « class Bonjour is public, should be declared in a file named Bonjour.java ». Java distingue majuscules et minuscules partout : string n'est pas String, system.out n'est pas System.out.

Confondre char et String

À éviter
Faux.java
char c = "A";    // erreur : "A" est un String
Correct
Correct.java
char c = 'A';    // apostrophes pour un char

Diviser deux entiers en attendant un réel

À éviter
Faux.java
int somme = 7, n = 2;
double moyenne = somme / n;      // 3.0 : la division est entière
Correct
Correct.java
int somme = 7, n = 2;
double moyenne = (double) somme / n;   // 3.5

nextInt() suivi de nextLine()

nextInt() lit le nombre mais laisse le retour à la ligne dans le tampon : le nextLine() suivant renvoie alors une chaîne vide. Après un nextInt(), ajoute un clavier.nextLine(); pour consommer ce retour, ou lis tout avec nextLine() puis convertis avec Integer.parseInt.

Un résultat trop grand pour le type

int a = 2_000_000_000; int b = a + a; donne un nombre négatif, sans message d'erreur. Utilise long (ou Math.addExact, qui lève une exception) quand les valeurs peuvent dépasser 2 milliards.

nextDouble() et la virgule

Sur un système en français, nextDouble() attend une virgule (1,78) et refuse le point (InputMismatchException). Le comportement dépend de la langue de l'ordinateur ; en cas de doute, lis une ligne avec nextLine() puis convertis avec Double.parseDouble, qui accepte toujours le point.

Oublier le point-virgule

Chaque instruction se termine par ;. L'erreur « ';' expected » est signalée à la fin de la ligne précédente quand le ; manque : regarde la ligne au-dessus de celle indiquée.

📋 Aide-mémoire

  • javac Fichier.java compile, java Fichier exécute ; le fichier porte le nom de la classe publique.
  • Squelette : public class X { public static void main(String[] args) { … } }.
  • Types : int, long, double, boolean, char (apostrophes), String (guillemets) ; final pour une constante.
  • / entre entiers = division entière ; (double) a / b pour un réel ; (int) x tronque.
  • System.out.println / print / printf (%d %f %s %n) ; + concatène avec un String.
  • Scanner clavier = new Scanner(System.in); puis nextLine(), nextInt(), nextDouble().