Support de cours :
IntroJava01_2022
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 deecho
).
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 dehashCode
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
oufalse
) indiquant si les deux objets sont égaux.
Comment redéfinir equals
?
Pour redéfinir la méthode equals
, suivez les étapes suivantes :
- Commencez par vérifier si l’objet passé en paramètre est identique à l’objet courant (
this
). - Vérifiez si l’objet passé est
null
ou s’il appartient à une classe différente. - Comparez les champs pertinents des deux objets en utilisant des comparaisons appropriées (par exemple,
==
pour les types primitifs etequals
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éfinirhashCode
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é avecequals
estnull
. - 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éthodeequals
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.
- Ajout, suppression et recherche d’un élément se font en
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
etequals
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.
- Recherche, insertion et suppression d’une clé ou d’une valeur se font en
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.