mirror of
https://github.com/BreizhHardware/cours-ISEN-MD.git
synced 2026-03-18 21:50:46 +01:00
8.2 KiB
8.2 KiB
#CIPA4 #Java
Introduction
Java language orienté objet
V1 en 1996 Une version tout les 6 mois depuis Java 9
Caractéristiques de java
- Typage fort
- Tout est objet
- Toute erreur aboutit à une levée d'exception
- Gestion automatique de la mémoire
Les fichiers
- Programme composé uniquement de classes
- Fichier .java
- La classe MaClasse doit être dans le fichier MaClasse.java
Point d'entrée du programme
- La classe main class avec la méthode
main()dont le proto est
public static void main (String[] args)
Convention de nommage
- CamelCase, les variables commences par des miniscule nomDeVariable et les classes par des majuscule NomDeClasse
- Attention les constant sont déclaré comme ceci: NOM_DE_CONSTANTE
Hello World
Dans le fichier HelloWorld.java
public class HelloWorld {
public static void main(String[] args)
{
System.out.println("Hello World!\n");
}
}
Pour le compiler on utilise la cli:
javac HelloWorld.java
On obtient HelloWorld.class, pour l'exécuter:
java HelloWolrd
Même pas besoin du .class
Bases
Les types de données
- Il existe de type de données en Java
- Les type primitifs
- Les objets
- En Java, on ne manipule que des références sur les objets
Initialisation des variables
- Les variables sont automatiquement initialisées à :
0 / falsepour les types primitifsnullpour les objets
- MAIS : Il n’est pas possible d’utiliser une variable sans l’avoir explicitement initialisée (vérifié à la compilation)
Vérification des types
- La vérification des types est très stricte en Java
- A part quelques rares exceptions (autoboxing, toString (), …) il n’y a pas de conversion implicite en Java

- Les nombres à virgule écrits « en dur » sont implicitement des double. Il faudra les caster explicitement lors de l’initialisation d’un float

Types primitifs
- Ce sont les seuls types qui ne sont pas des objets en Java
- On retrouve les types de C/C++ :
- boolean
- char
- byte
- short, int , long
- float , double
Classes enveloppantes
- A chaque type primitif est associé une classe

- A chaque type primitif est associé une classe
- Ces classes, appelées classes enveloppantes (wrapper classes), encapsulent des types primitifs associés
- Comme toute fonction doit être une méthode de classe, les fonctions utilitaires permettant de manipuler chaque type se trouvent dans les classes correspondantes
Chaînes de caractères
- En Java, les chaînes de caractères sont modélisées par la classe String
- La méthode length renvoie la longueur de la chaîne
- L’opérateur + permet de concaténer des chaînes, et d’y inclure les valeurs de types primitifs (conversion implicite)
- Les méthodes de la classe String permettent d’effectuer quelques opérations courantes sur les chaînes

- Toute tentative de modification sur une chaîne crée une nouvelle chaîne car les chaîne sont immuables
- Comme en C, l’opérateur == compare l’adresse des chaînes en mémoire, et non leur contenu
- Pour tester si deux chaînes sont égales, il faut utiliser la méthode
equals()
Conversion
- Pour convertir un nombre en chaîne, utiliser la méthode
toString(). des classes enveloppantes - Pour convertir une chaîne en nombre, utiliser la méthode
parseXXX()des classes enveloppantes
Tableaux
- En Java, les tableaux sont des objets : ils sont donc manipulés par référence
- Un tableau possède un attribut
lengthqui contient sa taille - Initialisation d’un tableau vide
type[] array = new type[taille];
- Java possède une boucle de type « for each » qui évite d’explicitement manipuler des indices
int[] array = {1,2,3,4};
for(int value : array){
System.out.println(value);
}
Tableaux multidimensions
- Initialisation d’un tableau vide à N dimensions
type[]…[][] array = new type[dim1][dim2]…[dimN]
Entrée/Sortie
Classe System
- La classe System permet d’interagir avec le système d’exploitation
Les flux d'entrée / sortie
- System.out modélise la sortie standard
- La méthode
print()permet d’afficher des données avec un formatage automatique. - La méthode
println()ajoute un retour à la ligne (portable)
- La méthode
- System.in modélise l’entrée standard
- La méthode
read()permet de lire des octets. Elle est fastidieuse à utiliser car il faut manipuler les octets et faire les conversions à la main
- La méthode
Classe Scanner
- La classe Scanner fait partie du package
java.util - Elle découpe la chaîne en morceaux selon un délimiteur (espace par défaut, modifiable)
- On peut convertir chaque morceau dans un type cible. Une exception est levée si la conversion échoue.

- Ne pas oublier de fermer le Scanner après utilisation, avec la méthode
close()Example:
public class HelloYou {
public static void main(String[] args)
{
Scanner s = new Scanner(System.in); // création du Scanner
String name = s.next (); // lecture d'une chaîne bloquant
System.out.println ("Hello, " + name + "!");
s.close(); // fermeture du Scanner
}
}
Classes
Définition d'une classe
- Une classe possède des membres : des attributs et des méthodes
- Chaque membre possède une visibilité :
- Privée : Uniquement accessible depuis le code des méthodes de la classe
- Publique : Accessible depuis n’importe où
- Protected: visible des classes enfants de la classe
- Package private (défaut) : visible des classes du package Example de classe
public class Fraction
{
private int numerator
private int denominator
public int getNumerator()
{
return this.numerator;
}
public void setNumerator(int numerator)
{
this.numerator = numerator;
}
public Fraction(int numerator, int denominator)
{
this.setNumerator(numerator);
this.setDenominator(denominator);
}
public Fraction(int numerator)
{
this(numerator, 1);
}
}
Import d'une classe
- Pour importer une classe
import <Nom du package>.<Nom de la classe>
- Pour importer toutes les classes d’un package
import <Nom du package>.*
Créer un package
Ajouter la ligne package <Nom du package> au début du fichier .java
Membre statique
- Un membre statique est associé à une classe (et non à une instance)
- On déclare un membre statique en ajoutant le mot clé static
- On accède à un membre statique m d’une classe C en écrivant : C.m
- Un attribut statique existe même si la classe n’a jamais été instanciée
- Dans le code d’une méthode statique, this n’a aucun sens.
- Utilisations :
- Partager une information entre toutes les instances d’une classe (sorte de variable globale dans la portée de la classe)
- Modéliser une information propre à la classe (ex : compteur d’instances)
- Définir des fonctions utilitaires
- Définir des constantes
Enumeration
- Une énumération permet de modéliser un type qui possède un nombre fini de valeurs Example
public enum Color
{
RED,
BLUE,
GREEN
}
Héritage
Déclaration d'un héritage
public class Point
{
private int x;
private int y;
public setX(int x)
{
this.x = x;
}
public setY(int y)
{
this.y = y;
}
public Point(x, y)
{
this.setX(x);
this.setY(y);
}
}
public class Forme
{
protected Point centre;
public void afficher()
{
System.out.println("Je suis une forme de centre " + this.centre);
}
public void setCentre(Point centre)
{
this.centre = centre;
}
public Forme(Point centre)
{
this.setCentre(centre);
}
}
public class Cercle extends Forme
{
private float rayon;
@Override //permet de préciser qu’une méthode est une surcharge
public void afficher()
{
super.afficher();
System.out.println("Je suis un cercle de rayon " + this.rayon);
}
public void setRayon(float rayon)
{
this.rayon = rayon;
}
public Cercle(Point centre, float rayon)
{
super(centre);
this.setRayon(rayon);
}
}
© Félix MARQUET