Cours sur Java - Première Partie - PDF

Summary

Ce document fournit une introduction à Java, décrivant les bases de la programmation telle que la déclaration et l'utilisation de variables, les différentes classes en Java et la distinction entre les types primitifs et les objets.

Full Transcript

## Commentaire: // Commentaire sur une ligne /* Commentaire sur plusieurs lignes */ ## Enregistrement: public class Exemple -> le programme doit être écrit dans le fichier Exemple.java public static void main(String[] args) { main est la méthode appelée lorsque que le programme s'exécute....

## Commentaire: // Commentaire sur une ligne /* Commentaire sur plusieurs lignes */ ## Enregistrement: public class Exemple -&gt; le programme doit être écrit dans le fichier Exemple.java public static void main(String[] args) { main est la méthode appelée lorsque que le programme s'exécute. void -&gt; la méthode ne retourne rien Stirng[] args -&gt; la methode prend en argument un tableau de chaîne de caratères ## Java à deux propriétés qui le diffèrencie fortement de Python: - fortement typée: il faut déclarer les variables et leur donner un type - à typage statique: le type d'une variable restera toujours le même pendant sa durée de vie ## Paradigme de java: - Programmation orientée objet: regroupe le code et les données dans des classes. - Programmation fonctionnelle: les sorties de certaines fonctions sont les entrées d'autre fonctions. - Réactif/ flux de donnée qui peuvent être traité en temps réel ## Attributs: les données, des variables qui sont propre à chaque objet ## Méthodes: le code exécuté ## Objets: Entité concrètes créer à partir d'une classe -&gt; les objets sont définies par les attribut et les méthode d'une classe - **Classe:** Une classe est comme un plan ou un modèle qui décrit les attributs (variables) et les méthodes (fonctions) qui définissent un objet. Par exemple, on peut avoir une classe Voiture avec des attributs comme couleur, marque et vitesse, et des méthodes comme demarrer() et freiner(). - **Objet EXEMPLE:** Un objet est une instance de cette classe. Par exemple, maVoiture = new Voiture(); crée un objet maVoiture de type Voiture. Cet objet peut avoir des propriétés spécifiques et peut exécuter les méthodes définies dans la classe Voiture. En Java, il existe une distinction entre les types primitifs et les types objets. Lorsqu'on parle de convertir un int (type primitif) en Integer (type objet), on fait référence à un processus appelé boxing ou autoboxing. ## Explication des types primitifs et des types objets - **int:** C'est un type primitif qui stocke directement une valeur numérique dans la mémoire. Par exemple, int x = 5; crée une variable x qui contient la valeur 5. - **Integer:** C'est une classe enveloppe (ou wrapper class) pour le type primitif int. Elle permet de traiter les entiers comme des objets, ce qui est utile lorsque tu as besoin de fonctionnalités supplémentaires, comme l'utilisation des entiers dans des collections (ArrayList, HashMap, etc.). ## Pourquoi convertir un int en Integer ? La conversion de int en Integer est nécessaire lorsque tu veux utiliser un int dans un contexte où un objet est requis, comme : - Stocker des valeurs dans des collections : Les collections Java, comme ArrayList ou HashMap, ne peuvent pas contenir de types primitifs. Elles ne peuvent stocker que des objets. - Utilisation de méthodes d'objets : Avec un Integer, tu peux accéder à des méthodes utiles pour des conversions ou des manipulations. ## Déclaration de variables: - **Initialisation:** une donne un type à une variable. - **Affectation:** On donne une valeur à une variable - **Déclaration:** On initialise et on affecte int x; int y; ## Types primitifs: boolean, char, byte, short, int, long, float, double Les fonctions prennent entre 0 et 1 argument et retorunent 0 ou 1 valeur. static μμμμμ nom_fontion(type value1, type value2) ## Les conditions: if (condition1){ //code } else if { //code } else { //code } ## Les condition boolean a=True boolean b=False System.out.println("a AND b"); if (a && b) { || ou System.out.println("true") !a : pas a ## Circuit de condition: String s1="Panthéon"; if(s1.lenght()>6 && s1.charAt(6)=='o'){ System.out.println(s1); } ## Constructeur: Sert à créer un nouvel objet avec le mot clé new et le nom du constructeur est le même que celui de la classe. public class Voiture{ // déclaration d'un attribut int vitesse; // Ceci est un constructeur public Voiture(int laVitesse) { vitesse laVitesse } public static void main(String[] args){ Voiture v=new Voiture(50); Voiture alpha=new Voiture(20); } } ## Portée des attibuts et des méthodes Dans notre cours, les attributs seront toujours private et les méthodes toujours public ## Accéder aux attributs et aux méthodes public class Voiture{ //ceci est une déclaration d'un attribut entier représentant la vitesse d'une voiture int vitesse; //ceci est un constructeur qui prend un paramètre entier public Voiture(int laVitesse) { vitesse laVitesse; } //ici, on affecte la valeur laVitesse à l'attribut vitesse public int getVitesse(){ return vitesse; //return this.vitess // une autre façon d'accéder aux attribiuts de l'objet en cours: les faires précéder du mot-clé this qui représente l'objet en cours (comme le self de python) } public static void main(String ...args){ Voiture v = new Voiture(30); int vitesse = v.getVitesse(); //permet d'appeller la méthode vitesse() depuis l'objet v } } ## Type de conversion: - **Conversion implicite:** int x=3; double d=x; - **conversion explicite:** double d=3.14; int x= (int) d; - **Conversion String to Integer** String s="3"; int x=Interger.parseInt(s); ## Types primitifs vs Objets - I exite 8 types primitifs en java : int, long, float, double, char, boolean, byte, short - stockent directement leur valeur - ne peuvent être null - on ne peut pas invoquer de méthodes - Il existe des classes enveloppe équivalentes (Intger, Long etc.) - Objets: Shape, Point, String... - ils ne stockent pas des valeurs, mais des références vers des valeurs - On peut accéder aux attributs à l'aide de l'opérateur. - Peuvent être null - on peut utiliser == pour savoir si deux références sont égales. ## Boucles for **classic** for (initialisation; condition; incrémentation) { // Instructions à exécuter à chaque itération } for (int i = 0; i < 5; i++) { System.out.println("Valeur de i : " + i); } **Foreach** for (Type element : collection) { // Instructions utilisant l'élément } int[] nombres = {1, 2, 3, 4, 5}; for (int nombre : nombres) { System.out.println("Nombre : " + nombre); } ## Méthode avec String - **public int length()** - **public int indexOf(int ch)** En Java, la méthode indexOf() est utilisée pour trouver l'index de la première occurrence d'un caractère ou d'une sous-chaîne dans une chaîne de caractères (String). Voici comment elle fonctionne : - **Pour un caractère:** int index = str.indexOf(char c); - **Pour une sous-chaîne :** int index = str.indexOf(String substring); **public int indexOf(int ch, int fromIndex)** **Avec un point de départ spécifique :** int index = str.indexOf(char c, int fromIndex); int index = str.indexOf(String substring, int fromIndex); - **public boolean startsWith(String prefix)** La méthode startsWith() en Java est utilisée pour vérifier si une chaîne de caractères commence par un préfixe spécifique. Voici les détails de cette méthode : public class Main { public static void main(String[] args) { String phrase = "Bonjour tout le monde"; // Vérifie si la chaîne commence par "Bonjour" boolean resultat1 = phrase.startsWith("Bonjour"); System.out.println("Commence par 'Bonjour' ? " + resultat1); // true // Vérifie si la chaîne commence par "monde" boolean resultat2 = phrase.startsWith("monde"); System.out.println("Commence par 'monde' ? " + resultat2); // false } } - **boolean endsWith(String suffix)** La méthode endsWith() en Java est utilisée pour vérifier si une chaîne de caractères se termine par un suffixe spécifique. public class Main { public static void main(String[] args) { String phrase = "Bonjour tout le monde"; // Vérifie si la chaîne se termine par "monde" boolean resultat1 = phrase.endsWith("monde"); System.out.println("Se termine par 'monde' ? " + resultat1); // true // Vérifie si la chaîne se termine par "Bonjour" boolean resultat2 = phrase.endsWith("Bonjour"); System.out.println("Se termine par 'Bonjour' ? " + resultat2); // false } } ## Utilisation de StringBuilder StringBuilder est une classe qui permet de manipuler des chaînes de manière plus efficace, surtout quand on effectue plusieurs modifications sur une chaîne. Contrairement à String, les objets StringBuilder sont modifiables. ## Exemple d'utilisation de StringBuilder - **append():** - Cette méthode ajoute une chaîne, un caractère, ou d'autres types de données à la fin du StringBuilder. - [Documentation officielle JDK 21](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringBuilder.html#append(java.lang.String)) public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Bonjour"); // Ajouter une chaîne de caractères sb.append(" tout le monde!"); System.out.println(sb); // Bonjour tout le monde! // Ajouter un entier sb.append(2024); System.out.println(sb); // Bonjour tout le monde!2024 // Ajouter un caractère sb.append('!'); System.out.println(sb); // Bonjour tout le monde!2024! } } - **insert():** - Insère une chaîne ou un caractère à un index spécifique dans le StringBuilder. - [Documentation officielle JDK 21](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringBuilder.html#insert(int,java.lang.String)) public class Main { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Bonjour monde!"); // Insérer une chaîne de caractères à l'index 7 sb.insert(7, "le beau "); System.out.println(sb); // Bonjour le beau monde! // Insérer un entier à l'index 0 sb.insert(0, 2024); System.out.println(sb); // 2024Bonjour le beau monde! // Insérer un caractère à l'index 10 sb.insert(10, 'X'); System.out.println(sb); // 2024Bonjour Xle beau monde! } } - **charAt():** - Renvoie le caractère à une position donnée dans le StringBuilder. - [Documentation officielle JDK 21](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringBuilder.html#charAt(int)) String str = "Bonjour"; char ch = str.charAt(1); // Renvoie 'o' - **setCharAt() :** - Remplace le caractère à une position spécifique dans le StringBuilder. - [Documentation officielle JDK 21](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringBuilder.html#setCharAt(int,char)) StringBuilder str = new StringBuilder("Bonjour"); str.setCharAt(1, 'a'); // Remplace le caractère à l'index 1 par 'a' System.out.println(str); // Affiche "Banjour" - **toString():** - Convertit le contenu du StringBuilder en une chaîne de caractères (String). - [Documentation officielle JDK 21](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/StringBuilder.html#toString()) StringBuilder sb = new StringBuilder("Bonjour"); String str = sb.toString(); System.out.println(str); // Affiche : Bonjour ## ArrayList ### 1. Caractéristiques principales - Située dans le package java.util. - Basée sur un tableau dynamique. - Peut contenir des éléments de n'importe quel type (grâce au système générique). - Autorise les éléments en double. - Offre plusieurs méthodes pour manipuler les données (ajout, suppression, recherche, etc.). ### 2. Importer une ArrayList Avant d'utiliser une ArrayList, il faut importer son package : import java.util.ArrayList; ### 3. Créer une ArrayList Vous pouvez déclarer une ArrayList de cette manière : // ArrayList de type String ArrayList<String> liste = new ArrayList<>(); // ArrayList de type Integer ArrayList<Integer> nombres = new ArrayList<>(); ### 4. Méthodes importantes Voici quelques méthodes couramment utilisées : - **add(E e)**: Ajoute un élément à la liste. - **add(int index, E e)**: Ajoute un élément à un index spécifique. - **get(int index)**: Retourne l'élément à l'index donné. - **set(int index, E e)**: Modifie l'élément à un index donné. - **remove(int index)**: Supprime l'élément à l'index donné. - **remove(Object o)**: Supprime la première occurrence de l'objet spécifié. - **size()**: Retourne le nombre d'éléments dans la liste. - **isEmpty()**: Vérifie si la liste est vide. - **clear()**: Supprime tous les éléments de la liste. - **contains(Object o)**: Vérifie si un élément existe dans la liste. - **indexOf(Object o)**: Retourne l'index de la première occurrence d'un élément. Get() set() add() .size() ### 5. Exemple pratique Voici un exemple d'utilisation de l'ArrayList : import java.util.ArrayList; public class Main { public static void main(String[] args) { // Création d'une ArrayList ArrayList<String> fruits = new ArrayList<>(); // Ajouter des éléments fruits.add("Pomme"); fruits.add("Banane"); fruits.add("Orange"); // Afficher la liste System.out.println("Liste des fruits : " + fruits); // Accéder à un élément System.out.println("Premier fruit : " + fruits.get(0)); // Modifier un élément fruits.set(1, "Fraise"); System.out.println("Après modification : " + fruits); // Supprimer un élément fruits.remove("Orange"); System.out.println("Après suppression : " + fruits); // Taille de la liste System.out.println("Taille de la liste : " + fruits.size()); // Vérifier si un élément existe if (fruits.contains("Pomme")) { System.out.println("La liste contient une pomme."); } } } Liste des fruits: [Pomme, Banane, Orange] Premier fruit: Pomme Après modification : [Pomme, Fraise, Orange] Après suppression : [Pomme, Fraise] Taille de la liste : 2 La liste contient une pomme. ### 6. Différences entre ArrayList et tableau | Caractéristi | Tablea | Array | | --- | --- | --- | | que | u | List | | Taille | Fixe | Dynamiq | | | | ue | | Types primitifs | Support direct | Nécessite des classes enveloppantes (ex. Integer) | | Méthodes intégrées | Limitées | Riches (ajout, suppression, etc.) | ### 7. Conseils d'utilisation - Utilisez ArrayList lorsque la taille de la liste est susceptible de varier. - Préférez un LinkedList pour des opérations fréquentes d'ajout/suppression au milieu de la liste. - Exploitez les génériques pour la sécurité de type. - Itérable donc on peut le mettre dans un for amélioré mais je peux pas la modifiée pendant qu'elle se fait parcourir. - ## Cours sur HashMap en Java En Java, une HashMap est une classe de la collection utilisée pour stocker des paires clé-valeur. Elle est particulièrement utile lorsque vous avez besoin d'accéder rapidement à une valeur à l'aide de sa clé. ### 1. Caractéristiques principales - Située dans le package java.util. - Permet de stocker des données sous forme de clé-valeur. - Les clés doivent être uniques (pas de doublons), mais les valeurs peuvent être dupliquées. - Peut contenir une valeur null pour une clé ou plusieurs valeurs nulles. - Basée sur un mécanisme de hachage, qui assure une recherche rapide. ### 2. Importer une HashMap Avant d'utiliser une HashMap, vous devez importer son package : import java.util.HashMap; ### 3. Créer une HashMap Voici comment déclarer une HashMap : // HashMap avec des clés et valeurs de type String HashMap<String, String> capitales = new HashMap<>(); // HashMap avec des clés de type String et valeurs de type Integer HashMap<String, Integer> populations = new HashMap<>(); ### 4. Méthodes importantes Voici les principales méthodes utilisées avec une HashMap : - **put(K key, V value)**: Insère une paire clé-valeur dans la HashMap. - **get(Object key)**: Retourne la valeur associée à une clé. - **remove(Object key)**: Supprime une paire clé-valeur par sa clé. - **containsKey(Object key)**: Vérifie si une clé existe dans la HashMap. - **containsValue(Object value)**: Vérifie si une valeur existe dans la HashMap. - **size()**: Retourne le nombre de paires clé-valeur. - **isEmpty()**: Vérifie si la HashMap est vide. - **clear()**: Supprime toutes les paires clé- valeur. - **keySet()**: Retourne un Set contenant toutes les clés. - **values()**: Retourne une collection de toutes les valeurs. - **entrySet()**: Retourne un Set contenant toutes les paires clé-valeur. ### 5. Exemple pratique Voici un exemple d'utilisation de la HashMap : import java.util.HashMap; public class Main { public static void main(String[] args) { // Création d'une HashMap HashMap<String, String> capitales = new HashMap<>(); // Ajouter des paires clé-valeur capitales.put("France", "Paris"); capitales.put("Allemagne", "Berlin"); capitales.put("Italie", "Rome"); // Afficher la HashMap System.out.println("Capitales : " + capitales); // Accéder à une valeur par sa clé System.out.println("La capitale de la France est : " + capitales.get("France")); // Supprimer une paire clé-valeur capitales.remove("Italie"); System.out.println("Après suppression : " + capitales); // Vérifier l'existence d'une clé if (capitales.containsKey("Allemagne")) { System.out.println("La HashMap contient l'Allemagne."); } // Itérer sur les clés for (String pays : capitales.keySet()) { System.out.println("Pays : " + pays + ", Capitale : " + capitales.get(pays)); } // Itérer sur les paires clé-valeur for (HashMap.Entry<String, String> entry : capitales.entrySet()) { System.out.println("Clé : " + entry.getKey() + ", Valeur : " + entry.getValue()); } } } ### 6. Différences entre HashMap et autres structures de données | Caractéristi | HashMap | ArrayList | | --- | --- | --- | | que | Clé- | Liste | | Structur | Valeur | | | Synchronisa | Non synchronisée (non | Non synchronisée | | tion | thread-safe) | | | Recherche | Très rapide (O(1) | Impossible (doit | | par clé | en général) | parcourir la liste) | HashMap comme un dictionnaire Clé et valeur de type différent Map.get("rainbow")==d["rainbow"] keySet()-->itérer sur les clées