Seb-Info

Java

Java

Java

Support de cours :

IntroJava01_2022

COURS PDF

Découvrir Java quand on vient du PHP — Syntaxe & différences clés (BTS SIO SLAM)

Objectifs : comprendre la syntaxe Java, identifier les différences majeures avec PHP, et savoir écrire/faire tourner un premier programme en Java.

Introduction

PHP est typiquement exécuté côté serveur (interprété), avec un typage dynamique. Java est compilé en bytecode puis exécuté par la JVM, avec un typage statique et une POO stricte (tout est dans une classe).

1) Premier programme

PHP

<?php
echo "Bonjour le monde !";
?>

Java

public class Bonjour {
    public static void main(String[] args) {
        System.out.println("Bonjour le monde !");
    }
}
  • Le fichier Java s’appelle comme la classe publique (Bonjour.java).
  • Le point d’entrée est public static void main(String[] args).
  • Affichage console : System.out.println() (équivalent de echo).

2) Variables & types

PHP

$nom = "Alice";
$age = 20;
$pi = 3.14;
$ok = true;

Java

String nom = "Alice";
int age = 20;
double pi = 3.14;
boolean ok = true;
Type Java Exemple Remarque
int int n = 5; Entier (primitif)
double double x = 3.14; Flottant double précision
boolean boolean b = false; Vrai/faux
char char c = 'A'; Caractère unique
String String s = "Texte"; Objet immuable

Java impose un type à la déclaration et n’utilise pas de $ devant les variables.

3) Structures de contrôle

Condition

if (age >= 18) {
    System.out.println("Majeur");
} else {
    System.out.println("Mineur");
}

Boucle for

for (int i = 0; i < 5; i++) {
    System.out.println(i);
}

Boucle foreach (for-each)

String[] noms = {"Ana", "Ben", "Chloé"};
for (String n : noms) {
    System.out.println(n);
}

4) Méthodes (fonctions)

PHP

function addition($a, $b) {
  return $a + $b;
}

Java

public class Maths {
    public static int addition(int a, int b) {
        return a + b;
    }
}

En Java, une fonction est toujours une méthode placée dans une classe. Le mot-clé static permet l’appel sans instancier d’objet.

5) POO : PHP vs Java

PHP

class Personne {
  private $nom;
  public function __construct($nom) { $this->nom = $nom; }
  public function sePresenter() { echo "Je m'appelle " . $this->nom; }
}

Java

public class Personne {
    private String nom;

    public Personne(String nom) {
        this.nom = nom;
    }

    public void sePresenter() {
        System.out.println("Je m'appelle " + nom);
    }
}

public class Main {
    public static void main(String[] args) {
        Personne p = new Personne("Alice");
        p.sePresenter();
    }
}
  • Visibilités : public, private, protected (comme PHP 5+), mais la syntaxe est stricte.
  • Tout code Java exécutable passe par une classe avec une méthode main.

6) Exemple complet : petite calculatrice console

import java.util.Scanner;

public class Calculatrice {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Entrez un nombre : ");
        double a = sc.nextDouble();
        System.out.print("Entrez un autre nombre : ");
        double b = sc.nextDouble();
        double somme = a + b;
        System.out.println("Résultat : " + somme);
        sc.close();
    }
}

Équivalent très simple en PHP (CLI) :

$a = readline("Entrez un nombre : ");
$b = readline("Entrez un autre nombre : ");
echo "Résultat : " . ($a + $b) . PHP_EOL;

7) Tableau des différences majeures

Concept PHP Java
Typage Dynamique Statique (obligatoire)
Exécution Interprété (SAPI/serveur) Compilé en bytecode (JVM)
Organisation Fichiers scripts Classes & packages
Entrée console readline() Scanner (java.util)
Affichage echo System.out.println()
POO Souple Stricte (tout en classe)
Erreurs Exceptions non obligatoires Exceptions vérifiées possibles (try/catch)

 

Qu’est-ce que la méthode equals en Java ?

La méthode equals est une méthode définie dans la classe Object et héritée par toutes les classes Java. Elle permet de comparer si deux objets sont égaux en termes de contenu ou d’état.

Caractéristiques principales :

  • La méthode equals compare par défaut les références mémoire des objets, c’est-à-dire si deux variables pointent vers la même instance.
  • Pour comparer le contenu logique de deux objets (par exemple, leurs champs), la méthode equals doit être redéfinie dans la classe.
  • La redéfinition de equals est souvent accompagnée de la redéfinition de hashCode pour garantir la cohérence dans les structures basées sur le hachage. (voir plus loin dans le cours HashSet et HashMap)

Signature de la méthode :


public boolean equals(Object obj)
  • Paramètre : obj est l’objet à comparer avec l’objet courant.
  • Retour : Un booléen (true ou false) indiquant si les deux objets sont égaux.

Comment redéfinir equals ?

Pour redéfinir la méthode equals, suivez les étapes suivantes :

  1. Commencez par vérifier si l’objet passé en paramètre est identique à l’objet courant (this).
  2. Vérifiez si l’objet passé est null ou s’il appartient à une classe différente.
  3. Comparez les champs pertinents des deux objets en utilisant des comparaisons appropriées (par exemple, == pour les types primitifs et equals pour les objets).

Exemple de redéfinition :


class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true; // Même instance
        if (obj == null || getClass() != obj.getClass()) return false; // Null ou classes différentes
        Person person = (Person) obj; // Cast de l'objet
        return age == person.age && name.equals(person.name); // Comparaison des champs
    }

    @Override
    public int hashCode() {
        return 31 * name.hashCode() + age; // Assurez-vous que hashCode est cohérent avec equals
    }
}

Exemple d’utilisation de equals

Voici un exemple montrant comment utiliser la méthode equals :


public class EqualsExample {
    public static void main(String[] args) {
        Person p1 = new Person("Alice", 25);
        Person p2 = new Person("Alice", 25);
        Person p3 = new Person("Bob", 30);

        System.out.println(p1.equals(p2)); // true : même contenu
        System.out.println(p1.equals(p3)); // false : contenu différent
        System.out.println(p1.equals(null)); // false : comparaison avec null
    }
}

Résultat attendu :


true
false
false

Points importants à retenir sur equals :

  • Si vous redéfinissez equals, vous devez également redéfinir hashCode pour garantir la cohérence.
  • Assurez-vous que les champs utilisés pour la comparaison sont pertinents pour l’égalité logique des objets.
  • Pour éviter une NullPointerException, vérifiez toujours si un champ utilisé avec equals est null.
  • Vous pouvez utiliser Objects.equals pour simplifier la comparaison de champs (introduit dans Java 7) :

@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return age == person.age && Objects.equals(name, person.name); // Utilisation de Objects.equals
}

Différences entre equals et == :

Aspect == equals
Comparaison Compare les références mémoire pour les objets. Compare le contenu ou l’état logique des objets (si redéfini).
Utilisé pour Types primitifs ou références d’objets. Comparer la logique d’égalité pour des objets personnalisés.
Redéfinition Non applicable. Peut être redéfini dans une classe pour une logique spécifique.

Qu’est-ce qu’un HashSet ?

Un HashSet est une collection en Java qui permet de stocker un ensemble d’éléments uniques, sans ordre particulier.

Caractéristiques principales :

  • Pas de doublons : Chaque élément est unique. Si un élément est ajouté et qu’un élément égal existe déjà, le nouvel élément est ignoré.
  • Pas d’ordre garanti : Les éléments ne sont pas conservés dans l’ordre d’insertion.
  • Basé sur le hachage : Utilise la méthode hashCode pour organiser les éléments dans des compartiments (buckets) et la méthode equals pour vérifier les doublons.
  • Performances :
    • Ajout, suppression et recherche d’un élément se font en O(1) en moyenne, grâce au hachage.

Quand utiliser un HashSet ?

  • Lorsque vous avez besoin d’un ensemble d’éléments uniques.
  • Si l’ordre des éléments n’est pas important.
  • Pour des opérations rapides d’ajout, de suppression ou de recherche.

Exemple de code :


import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();

        set.add("Alice");
        set.add("Bob");
        set.add("Charlie");
        set.add("Alice"); // Ignoré, car "Alice" existe déjà

        System.out.println("Contenu du HashSet :");
        for (String s : set) {
            System.out.println(s);
        }
    }
}

Résultat attendu :


Contenu du HashSet :
Alice
Bob
Charlie

Qu’est-ce qu’un HashMap ?

Un HashMap est une structure clé-valeur en Java. Il associe chaque clé unique à une valeur correspondante.

Caractéristiques principales :

  • Clés uniques : Chaque clé dans un HashMap est unique. Si une nouvelle clé identique est ajoutée, sa valeur écrase l’ancienne.
  • Valeurs multiples : Plusieurs clés peuvent avoir des valeurs identiques.
  • Pas d’ordre garanti : Les clés et valeurs ne suivent pas d’ordre particulier.
  • Basé sur le hachage : Utilise les méthodes hashCode et equals pour organiser et comparer les clés.
  • Performances :
    • Recherche, insertion et suppression d’une clé ou d’une valeur se font en O(1) en moyenne.

Quand utiliser un HashMap ?

  • Lorsque vous devez associer des clés uniques à des valeurs.
  • Si l’ordre des éléments n’est pas important.
  • Pour des opérations rapides de recherche ou de mise à jour des valeurs.

Exemple de code :


import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();

        map.put("Alice", 25);
        map.put("Bob", 30);
        map.put("Charlie", 35);
        map.put("Alice", 28); // Remplace la valeur précédente pour "Alice"

        System.out.println("Contenu du HashMap :");
        for (String key : map.keySet()) {
            System.out.println(key + " : " + map.get(key));
        }
    }
}

Résultat attendu :


Contenu du HashMap :
Alice : 28
Bob : 30
Charlie : 35

Différences entre HashSet et HashMap :

Aspect HashSet HashMap
Structure de données Ensemble d’éléments uniques Paires clé-valeur
Unicité Les éléments sont uniques Les clés sont uniques (les valeurs peuvent être identiques)
Basé sur Méthode hashCode des éléments Méthode hashCode des clés
Ordre Pas d’ordre garanti Pas d’ordre garanti
Complexité O(1) pour ajout/recherche/suppression O(1) pour ajout/recherche/suppression
Exemples d’usage Liste d’utilisateurs uniques Associer un nom à un numéro de téléphone

Ce contenu est réservé aux membres du site. Si vous êtes un utilisateur existant, veuillez vous connecter. Les nouveaux utilisateurs peuvent s'inscrire ci-dessous.

Connexion pour les utilisateurs enregistrés
   
Nouvel utilisateur ?
*Champ requis
Powered by WP-Members