Formation Java 8

Java

  • Un langage

  • Une plateforme

  • Une machine virtuelle (JVM)

  • Des APIs (JEE)

  • Un écosystème

Java - le langage

  • Compilé (en bytecode)

  • Orienté objet

  • Fortement typé

  • Concurrent

  • Syntaxe inspirée du langage C

Java bytecode

  • On code en Java (App.java)

  • On compile en bytecode (App.class)

  • La JVM exécute le bytecode

    • Le bytecode est toujours le même quel que soit l'environnement d'exécution

    • Seule l'implémentation de la JVM change

    • « Write once, run everywhere »

Mise en pratique

Créer un fichier App.java

Copier dans ce fichier :

 

 

Ouvrir une console et taper la commande :

Vérifier qu'un fichier App.class a bien été créé

Lancer le programme : 

Visualiser le bytecode :

public class App {
    public static void main(String[] args) {
        System.out.println("Hello, World !");	
    }
}
javac App.java
java App
javap -c App

Hello World

class App {
 
    public static void main(String[] args) {
	System.out.println("Hello, World !");
    }
 
}

Passer un argument en ligne de commande

class App {
 
    public static void main(String[] args) {
	System.out.println("Hello, " + args[0]);
    }
 
}

Classe

class Person {
    // corps de la classe Person
}

class Car {}

class Animal {}

class HttpClient {}

class Batmobile {}

new Batmobile();

Classe VS Instance

class Batmobile {}


class App {

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

}

Classe VS Instance

Variable

class Batmobile {}


class Program {

    public static void main(String[] args) {
        Batmobile batmobile; // On déclare la variable de type Batmobile
        batmobile = new Batmobile(); // On initialise la variable
    }

}

Déclaration de la variable

Batmobile batmobile;
  • type

  • nom

Initialisation de la variable

batmobile = new Batmobile();
  • nom de la variable

  • mot clef pour l'instanciation

  • nom de la classe instanciée

Déclaration + initialisation

class Batmobile {}


class Program {

    public static void main(String[] args) {
        Batmobile batmobile = new Batmobile();
    }

}

Méthode

Définit le comportement d'une classe

class Batmobile {

    // on déclare une méthode de la classe Batmobile
    void goFast() {
        // corps de la méthode goFast()
    }

}

Signature d'une méthode

void goFast() { }
  • type de retour

  • nom

Appel d'une méthode

class Batmobile {

    void goFast() {}

}


class Program {

    public static void main(String[] args) {
        Batmobile batmobile = new Batmobile();
        batmobile.goFast(); // On appelle la méthode goFast()
    }

}

batmobile.goFast();

System.out.println()

System.out.println("Hello, World !");

System.out.println(); // saute une ligne

System.out.println(42);
class Batmobile {

    void goFast() {
        System.out.println("You can't catch me !");
    }
	
}

class Program {

    public static void main (String[] args) {
        Batmobile batmobile = new Batmobile();
        batmobile.goFast();
    }
	
}

Strings

  • String s = "Du texte";

  • Toute chaîne de charactère est une instance de la classe String

  •  ... autrement dit, un objet

Concaténation

String greeting = "Hello";
String name = "Bob";

String message = greeting + ", " + name + " !";
System.out.println(message) // Affiche "Hello, Bob !"

Classe

  • Etat

  • Comportement

Comportement => Méthode

class Person {

    void sayHello() {
        System.out.println("Hello !");
    }

}

Etat => Attribut

class Person {

    String name = "Bob";

    void sayHello() {
        System.out.println("Hello, my name is " + name);
    }

}

Constructeur

class Person() {

    String name;

    Person(String name) {
        this.name = name;
    }

}


class Program {

    public static void main(String[] args) {
        new Person("Bob");
    }

}

Plusieurs constructeurs

class Person() {

    String name;

    Person() {
        this.name = "Default name";
    }

    Person(String name) {
        this.name = name;
    }

}

Constructeur par défaut

class Person() {

    String name;

}


class Program {

    public static void main(String[] args) {
        new Person(); // Constructeur généré par le compilateur Java
    }

}

TODO : Quiz

Méthode statique

  • Aussi appelée méthode de classe

  • Peut être appelée sans créer d'instance

  • Peut être appelée depuis une autre méthode statique

class Program {

    static void sayHello() {
        System.out.println("Hello, World!");
    }

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

}

Types primitifs

  • Entiers

    • byte, short, int, long
  • Décimaux

    • float, double
  • Booléan

    • boolean
  • Charactère

    • char

Opérateurs

  • Mathématiques

    •   +  -  /  *  %
  • Incrémentation & Décrémentation

    •       ++        --
  • Ajouter & Soustraire

    •       +=        -=

Conditions

  • if... else

  • switch

  • ? (opérateur ternaire)

Exercice 1

Créer une méthode statique "bothPositive" :

  • paramètres : deux entiers i et j

  • type de retour : boolean

  • retourne true si les deux entiers sont positifs

  • sinon retourne false

Exercice 2

Créer une méthode statique "maybeEquals" :

  • paramètres : deux entiers i et j

  • type de retour : int

  • retourne la somme si i différent de j

  • sinon, retourne le double de la somme  

Exercice 3

Créer une méthode statique "waterMixState" :

  • paramètres : deux int i et j

  • type de retour : String

  • Si la moyenne des entiers est... :

    • inférieure à 0 => retourne "ICE"

    • comprise entre 0 et 100 => "LIQUID"

    • supérieure à 100 => "STEAM"

Boucles

  • while

  • do... while

  • for

Exercice 1

Créer une méthode statique "countTo" :

  • paramètres : int i

  • type de retour : aucun

  • affiche tous les nombres de 0 à i

Exercice 2

Créer une méthode statique "countEvensTo" :

  • paramètres : int i

  • type de retour : aucun

  • affiche tous les nombres pairs de 0 à i

Exercice 3

Créer une méthode statique "sumTo" :

  • paramètres : int i

  • type de retour : int

  • retourne la somme de tous les nombres de 0 à i

Exercice 4

Créer une méthode statique "averange" :

  • paramètres : int i

  • type de retour : int

  • retourne la moyenne des nombres de 0 à i

Garbage Collector

  • Processus automatique

  • Lancé régulièrement par la JVM

  • Mission : nettoyer la mémoire

  • Supprime les objets non référencés

  • On peut le lancer manuellement...

    • ... mais c'est une mauvaise pratique

Java 8

By AdapTeach