Introduction§

Mon premier programme§

Ex.1. Hello World (5 min)§

/**
 * The HelloWorldApp class implements an application that
 * simply prints "Hello World!" to standard output.
 */
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}

Fonctionnement§

Compilé en un langage intermédiaire unique (bytecode) puis interprété: "write once, run everywhere".

compilation et interprétation

En pratique...§

Compiler proprement§

Les bases du langage§

Adresses utiles§

Pensez à consulter régulièrement

Utilisez des marques-pages.

Types primitifs§

Opérateurs§

Instructions et blocs§

Tableaux§

	int[] array_of_int; // équivalent à : int array_of_int[];
	int rgb[][][];
	array_of_int = new int[42];
	array_of_int[0] = 3;
	rgb = new int[256][256][256];
	int[] primes = {1, 2, 3, 5, 7, 7 + 4};
	int length = array_of_int.length;//length == 42
	int integer = array_of_int[0];//integer == 3

Ex.2. Arguments (10 min)§

    public static void main (String[] args) {
    }

Le jeu des différences§

Tout ça ressemble au C. Mais en y regardant de plus près, certains détails laissent penser que Java génère un monde un peu différent, peuplé d'objets:

Programmation orienté-objet§

Introduction§

Dans ce petit exemple introductif, on comprend qu'on va décrire les tâches de la machine plus seulement comme une liste d'instructions, mais comme un système dynamique d'objets qui inter-agissent.

A l'exécution, sont crées en mémoire un ensemble d'objets. Chaque objet possède un état (qui peut changer) et des opérations qu'il sait réaliser. Les objets inter-agissent en s'adressant des requêtes les uns aux autres sur le mode "je te demande de faire telle opération".

Classe§

Le programmeur va définir les caractéristiques d'une famille d'objets en écrivant une classe.

La classe a

Ex.3. Interrupteur/Classe (5 min)§

Copiez et compilez.

/** Classe modelisant un interrupteur à bascule. */
class Interrupteur {
    /** booleen indiquant l'etat de l'interrupteur */
    boolean estEnMarche = false; 
    /** Methode basculant l'état de l'interrupteur. */
    void basculer() {
	estEnMarche = (!estEnMarche); 
    }
}

Attention, cette classe n'est pas exécutable, car elle ne contient pas de main, point d'entrée obligatoire de toute classe exécutable.

Instanciation§

Un objet est manipulé via une variable dont le type porte le nom de sa classe. Cette variable contient une référence vers la zone mémoire allouée pour l'objet.

//déclaration d'une référence (aucun objet n'est créé)
Interrupteur unInterrupteur;

Pour créer en mémoire un nouvel objet (= instance), on utilise l'opérateur new, suivi de l'appel à une méthode portant le nom de la classe et appelée constructeur. Si aucun constructeur n'est écrit par le programmeur, celui-ci est automatiquement créé à la compilation.

//création de l'objet, référencé par la variable unInterrupteur
unInterrupteur = new Interrupteur();

Valeurs par défauts§

Les champs d'une classe ont tous une valeur par défaut:

NB: Seulement les champs, pas les variables locales.

Initialisation des champs§

La première fois que la classe Interrupteur est impliquée dans l'éxécution du programme (ex. un objet de type Interrupteur est créé), la machine virtuelle charge Interrupteur.class en mémoire.

Lorsque l'on crée un nouvel objet de type Interrupteur, suffisamment d'espace mémoire est alloué et mis à zéro (estEnMarche contient sa valeur par défaut: false).

Enfin, les champs sont initalisés dans l'ordre de déclaration (on affecte false à estEnMarche, ce qui est inutile, mais rend le code plus lisible), avant que le constructeur (ici, par défaut) soit appelé.

Interaction entre objets§

Une fois qu'un objet est créé, un objet tiers (= client) peut lui envoyer des requêtes (= message), c'est-à-dire

unInterrupteur.estEnMarche = true;
System.out.println( "est sur ON ?" + unInterrupteur.estEnMarche );
unInterrupteur.basculer(); //je lui demande de changer d'état
System.out.println( "est sur ON ?" + unInterrupteur.estEnMarche );

Ex.4. Interrupteur/Test (10 min)§

/** Classe testant l'interrupteur à bascule. */
class InterrupteurTest {
    public static void main(String[] args) {
	Interrupteur i = new Interrupteur(); 
	//TODO
    }
}

Ce qu'il faut retenir§

Copie d'objets§

Ex.5. Affectation (5 min)§

Comparez ce que font ces deux blocs (dans un fichier DemoAffectation.java).

boolean b1 = false;
boolean b2 = b1;
b2 = !b2;
System.out.println( b1 );
Interrupteur i1 = new Interrupteur();
Interrupteur i2 = i1;
i2.basculer();
System.out.println( i1.estEnMarche );

Ex.6. Passage de paramètres (5 min)§

Comparez ce que font ces deux fonctions (dans un fichier DemoPassageParametres.java).

static void faireBasculerBooleen(boolean unBool) {
   unBool = !unBool;
}
static void faireBasculerInterrupteur(Interrupteur unInterrupteur) {
   unInterrupteur.basculer();
}

Ce qu'il faut retenir§

Ce que vous devez savoir faire§