Files
cours-ISEN-MD/ISEN/JAVA/CIPA4/Java Cours 1.md

8.2 KiB
Raw Blame History

#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 / false pour les types primitifs
    • null pour les objets
  • MAIS : Il nest pas possible dutiliser une variable sans lavoir 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 ny a pas de conversion implicite en Java
  • Les nombres à virgule écrits « en dur » sont implicitement des double. Il faudra les caster explicitement lors de linitialisation dun 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
  • Lopérateur + permet de concaténer des chaînes, et dy inclure les valeurs de types primitifs (conversion implicite)
  • Les méthodes de la classe String permettent deffectuer 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, lopérateur == compare ladresse 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 length qui contient sa taille
  • Initialisation dun tableau vide
type[] array = new type[taille];
  • Java possède une boucle de type « for each » qui évite dexplicitement manipuler des indices
int[] array = {1,2,3,4}; 
for(int value : array){
	System.out.println(value);
}

Tableaux multidimensions

  • Initialisation dun tableau vide à N dimensions
type[][][] array = new type[dim1][dim2][dimN]

Entrée/Sortie

Classe System

  • La classe System permet dinteragir avec le système dexploitation

Les flux d'entrée / sortie

  • System.out modélise la sortie standard
    • La méthode print() permet dafficher des données avec un formatage automatique.
    • La méthode println() ajoute un retour à la ligne (portable)
  • System.in modélise lentré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

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 nimporte 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 dun 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 dune classe C en écrivant : C.m
    • Un attribut statique existe même si la classe na jamais été instanciée
    • Dans le code dune méthode statique, this na aucun sens.
  • Utilisations :
    • Partager une information entre toutes les instances dune classe (sorte de variable globale dans la portée de la classe)
    • Modéliser une information propre à la classe (ex : compteur dinstances)
    • 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 quune 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); 
	}
} 

&copy Félix MARQUET