Définition

Java est un langage de programmation orienté objet créé par James Gosling et Patrick Naughton, employés de Sun Microsystems, avec le soutien de Bill Joy (cofondateur de Sun Microsystems en 1982), présenté officiellement le 23 mai 1995 au SunWorld.

La particularité et l’objectif central de Java est que les logiciels écrits dans ce langage doivent être très facilement utilisables sur plusieurs systèmes d’exploitation tels que Unix, Windows, Mac OS ou GNU/Linux.

Fonctionnement

Lorsque notre programme est écris en Java, des compilateurs Java compilent le code source afin d’obtenir un bytecode (plus précisément le bytecode Java, un langage de type assembleur, proche de la machine virtuelle et spécifique à la plate-forme Java).

Ce bytecode est ensuite interprété sur une machine virtuelle Java (JVM en anglais). Ce qui nous donne au final un programme écrit spécifiquement pour la machine cible qui interprète le bytecode Java et fait exécuter par la machine les instructions traduites en code natif.

Syntaxe

La syntaxe du java n’est pas complexe. Il faut connaître les différents mots réservés du langage et connaître leur signification.

Nous allons commencer par analyser le programme le plus simple Hello World.

Dans tous les langages de programmation, tout nouveau programmeur commence par un programme simple qui affiche a l’écran la phrase: “Hello World” ou bien “Bonjour Monde”.

Voici un exemple d’un programme Hello world typique écrit en Java :

Le fichier source porte presque toujours le nom de la classe avec l’extension “.java” (ici “HelloWorld.java”).

Mots réservés, primitifs et littéraux

Les mot réservés sont des mots déjà utiliser par la langage Java lui même et donc le programmeur ne peut les utiliser.

Voici la liste des mots réservé:

abstract

else

instanceof

static

try

boolean

false

assert

enum

interface

volatile

byte

true

break

extends

native

super

while

char

case

final

new

switch

double

catch

finally

package

synchronized

float

class

for

private

this

int

const

goto

protected

throw

long

continue

if

public

throws

short

default

implements

return

transient

void

null

do

import

Notion d’importation et paquetage

Dans des projet Java, il peut y avoir plusieurs classes. Chaque classe est un fichier .java a l’intérieur d’un dossier appelé paquetage.

Si dans une classe, nous avons la nécessite d’utiliser ou de faire appel a une autre classe nous pouvons le faire en important le paquetage de la classe qui nous intéresse.

Notion de classe

Un classe définit une catégorie d’objet dans notre programme, elle contient des propriétés dit attributs et des actions dit méthodes.

À partir d’une classe on peut créer un ou plusieurs objets par instanciation ; chaque objet est une instance d’une seule classe (c’est a dire a été crée a partir d’une classe).

Notion de méthode

une méthodes est un action ou une opération a l’intérieur d’une classe. Elle a besoin d’un input et d’un output.

elle est définie par :

Son type de retour : type de la valeur retournée par la méthode. Si la méthode ne retourne pas de valeur le type spécifié est alors void . ceci est notre output.

. ceci est notre output. Son nom

Ses paramètres : les paramètres sont spécifiés par leur type et leur nom et sont séparés par des virgules. ceci représente notre input

Notion de visibilité

il existe une notion de visibilité pour les classes, les attributs et les méthodes.

Visibilité de classe

Public : le mot class est alors précédé de public , tout utilisateur qui importe le paquetage peut utiliser la classe. Dans ce cas elle doit être définie dans un fichier qui a pour nom le nom de la classe.

est alors précédé de , tout utilisateur qui importe le paquetage peut utiliser la classe. Dans ce cas elle doit être définie dans un fichier qui a pour nom le nom de la classe. Privé : le mot class est alors précédé de private , seules des classes définies dans le même fichier peuvent utiliser cette classe.

est alors précédé de , seules des classes définies dans le même fichier peuvent utiliser cette classe. Paquetage : le mot class n’est pas précédé de mot particulier, toutes les classes du paquetage peuvent utiliser la classe.

Visibilité d’attribut

Public: sa définition est précédée de public , et il peut être utilisé par tout utilisateur de la classe.

, et il peut être utilisé par tout utilisateur de la classe. Privé: sa définition est précédée de private , et il ne peut être utilisé qu’à l’intérieur de la classe

, et il ne peut être utilisé qu’à l’intérieur de la classe Protégé: sa définition est précédée de protected , et il ne peut être utilisé qu’à l’intérieur de la classe, ou des classes dérivées.

, et il ne peut être utilisé qu’à l’intérieur de la classe, ou des classes dérivées. Paquetage: aucun mot particulier ne précède sa définition, ainsi il peut être utilisé dans toute classe du même paquetage.

Visibilité de méthodes

Public: sa définition est précédée de public , et elle peut être utilisée par tout utilisateur de la classe.

, et elle peut être utilisée par tout utilisateur de la classe. Privé: sa définition est précédée de private , et elle ne peut être utilisée qu’à l’intérieur de la classe

, et elle ne peut être utilisée qu’à l’intérieur de la classe Protégé: sa définition est précédée de protected , et elle ne peut être utilisée qu’à l’intérieur de la classe, ou des classes dérivées.

, et elle ne peut être utilisée qu’à l’intérieur de la classe, ou des classes dérivées. Paquetage: aucun mot particulier ne précède sa définition, ainsi la méthode peut être utilisé dans toute classe du même paquetage.

Types

En Java, chaque variable a un types. Voici la liste des type prédéfinis:

boolean : un booléen (d’ordre 2 en réalité) qui ne pourra prendre que les valeurs true ou false .

: un booléen (d’ordre 2 en réalité) qui ne pourra prendre que les valeurs ou . byte : un entier relatif très court (entre -128 et 127).

: un entier relatif très court (entre -128 et 127). short : un entier relatif court (entre -32 768 et 32 767).

: un entier relatif court (entre -32 768 et 32 767). int : un entier relatif (entre -2 147 483 648 et 2 147 483 647).

: un entier relatif (entre -2 147 483 648 et 2 147 483 647). long : un entier relatif long (entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807).

: un entier relatif long (entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807). float : un nombre décimal (entre -1.40E-45 et 3.40E38).

: un nombre décimal (entre -1.40E-45 et 3.40E38). double : un nombre décimal à double précision (entre -1.79E308 et 1.79E308).

: un nombre décimal à double précision (entre -1.79E308 et 1.79E308). char : un caractère unicode (entre ‘\u0000’ et ‘\uffff’).

: un caractère unicode (entre ‘\u0000’ et ‘\uffff’). string : une chaîne de caractère.

Pour instancier une variable, la syntaxe est la suivante :

NomDuType nomDeLaVariable;

Les collections d’objets

Il est souvent nécessaire de stocker de nombreuses données dans des collections : liste d’achats, notes des élèves, etc. Les collections peuvent être consultées, modifiées, on peut les trier, les recopier, les supprimer, etc. Elles peuvent avoir une taille fixe ou variable.

Les collections à taille fixe sont moins lourdes que les collections à taille variable.

Collections de taille fixe

Les tableaux

Les indices d’un tableau de taille n vont de 0 à n-1. Les tableaux sont des objets en Java. Pour initialiser un tableau tab d’entiers de 10 cases, on peut écrire :

ou :

Les indices de tab vont de 0 à 9, et il ne pourra pas être redimensionné. Chaque élément de tab est initialisé à sa valeur par défaut, ici 0 car il s’agit d’un tableau d’entiers ( int ).Pour lire ou modifier l’élément de tab d’indice i, pour 0 ≤ i ≤ 9, on utilise tab[i].

Exemple : Pour attribuer la valeur 2 à une case de tab , on écrit : tab[i] = 2; La propriété length (exemple : tab.length ) fournit le nombre d’éléments du tableau. Si on essaie de modifier un élément qui n’existe pas, par exemple avec tab [10] = 4; une eurreur IndexOutOfBoundsException est déclenchée (notre tableau tab ne contient que 10 cases, numérotées de 0 à 9 inclus).

Collections de taille variable

Pour initialiser une ArrayList il faut importer la classe java.util.ArrayList et écrire liste = new ArrayList<T>(); ou liste = new ArrayList<>();

T represente le type d’element qui sera dans ma liste.

Cette collection est vide après l’appel du constructeur ;

On peut ajouter autant d’éléments que l’on veut.

Pour ajouter un élément on écrit liste.add(Objet);

Pour accéder à un élément de l’ArrayList : liste.get(index);

Pour connaître le nombre d’éléments que contient une liste : liste.size();

Pour supprimer un élément : liste.remove(index); les éléments qui suivent l’élément supprimé seront décalés à gauche.

Structures de contrôle

Boucles

Structure tant que (adaptée pour effectuer des opérations tant qu’une condition est remplie) :

Structure faire … tant que (comme la structure tant que mais la première itération est exécutée quelle que soit la condition, pour les autres itérations la condition doit être remplie) :

Structure pour (adaptée lorsqu’ une collection doit être parcourue en totalité pour traitement) :

Structures conditionnelles

Structure si : condition simple

Structure si … sinon : condition avec alternative unique

Structure si … ou si … ou si … : condition avec alternatives multiples

Structure atteindre … cas x … cas y … : embranchement vers un bloc d’instructions énuméré.

Le choix d’exécution des instructions est déterminé par la valeur de <expression> dont le type peut être entier (int, char, byte ou short), énuméré (enum).

Branchements inconditionnels

L’instruction break fait sortir immédiatement de la boucle en cours (for, while, do), mais permet également de sortir d’une clause contenue dans un switch. Si le break est omis, l’exécution du switch se poursuit de case en case.

fait sortir immédiatement de la boucle en cours (for, while, do), mais permet également de sortir d’une clause contenue dans un switch. Si le break est omis, l’exécution du switch se poursuit de case en case. L’instruction continue termine l’itération en cours et continue à la prochaine.

termine l’itération en cours et continue à la prochaine. L’instruction return termine une méthode. Avec return <uneValeur>, uneValeur sera renvoyée à la méthode appelante.

Traitement des exceptions

un exception est une erreur qui survient lors de l’ exécution d’un programme.

Le rôle du programmeur est de les prévoir et de les gérer pour éviter que le programme se bloque ou se termine de manière inattendue.

Si nous savons qu’un groupe d’instruction pourrait générer une erreur alors nous encadrons ce groupe d’instruction par un try et catch comme suit:

Le bloc de code après catch nous permet de gérer l’erreur de la maniéré la plus adéquate.

Le bloc de code finally sera exécuté quel que soit le résultat lorsque le programme sortira du bloc try-catch.

Voici un exemple de capture d’une exception :

Programme sans capture

// permet de faire un commentaire dans le programme.

Programme avec capture

Types génériques

Un type générique est autrement appelé Template, prend un ou plusieurs autres types en arguments. Le type passé en paramètre est déterminé lors de l’instanciation.

Exemple:

ArrayList<E>

ArrayList<E> est un type générique et le paramètre est E. E représente un type primitif et sera défini lors de instanciation:

Frameworks

un Framework fourni une méthode standard pour créer et déployer des applications.

Sun fournit un grand nombre de frameworks et d’API afin de permettre l’utilisation de Java pour des usages très diversifiés.

On distingue essentiellement quatre grands frameworks :

Java SE (anciennement J2SE) : ce framework est destiné aux applications pour poste de travail ;

Java EE (anciennement J2EE) : ce framework est spécialisé dans les applications serveurs. Il contient pour ce faire un grand nombre d’API et d’extensions ;

Java ME (anciennement J2ME) : ce framework est spécialisé dans les applications mobiles ;

Java FX (à ne pas confondre avec JavaFX) : ce framework est spécialisé dans les applications liées aux cartes à puces et autres SmartCards.

Outils de développement

La programmation peut se faire depuis une invite de commande en lançant un compilateur Java (souvent nommé javac), mais pour avoir plus de confort, il est préférable d’utiliser un environnement de développement intégré ou IDE, certains sont gratuits. Par exemple les plus connus sont :

Eclipse ;

IntelliJ IDEA ;

NetBeans ;

Xcode.

Outils d’ automatisation

Un programme Java peut être produit avec des outils qui automatisent le processus de construction (c’est-à-dire l’automatisation de certaines tâches faisant appel à un nombre potentiellement grand de dépendances comme l’utilisation de bibliothèques, la compilation, la génération d’archives, de documentation, le déploiement, etc.). Les plus utilisés sont :

Apache Ant (génération portable, décrite en XML) ;

Apache Maven (génération portable, décrite en XML) ;

Gradle (génération portable, en utilisant le langage Groovy) ;

SCons (génération portable, en utilisant le langage Python).

Database

Une base de données (database en anglais), permet de stocker et de retrouver l’intégralité de données brutes ou d’informations en rapport avec un thème ou une activité ; celles-ci peuvent être de natures différentes et plus ou moins reliées entre elles.

La base de données est au centre des dispositifs informatiques de collecte, mise en forme, stockage et utilisation d’informations. Le dispositif comporte un système de gestion de base de données (abréviation : SGBD) : un logiciel moteur qui manipule la base de données et dirige l’accès à son contenu.

Les bases de données sont par exemple utilisées dans les secteurs de la finance (banques), des assurances, des écoles, de la médecine, de l’administration publique (notamment les statistiques) et des médias.

Lorsque plusieurs bases de données sont constituées sous forme de collection, on parle alors d’une banque de données.

Java et les base de données

JDBC est une interface de programmation crée par Sun Microsystems — depuis racheté par Oracle Corporation — pour les programmes utilisant la plateforme Java. Elle permet aux applications Java d’accéder par le biais d’une interface commune à des sources de données pour lesquelles il existe des pilotes JDBC. Des pilotes JDBC sont disponibles pour tous les systèmes connus de bases de données relationnelles (Oracle, MySql, PostgreSQL…)

Thread

Un thread ou fil (d’exécution) ou tâche est similaire à un processus car tous deux représentent l’exécution d’un ensemble d’instructions du langage machine d’un processeur. Du point de vue de l’utilisateur, ces exécutions semblent se déroulent en parallèle.

Un Thread existe dans différent états:

New —Quand on crée l’instance du thread

—Quand on crée l’instance du thread Running — le thread Java est lancé.

le thread Java est lancé. Suspended —un thread Java en exécution peut être suspendu , il suspend donc son activité.

—un thread Java en exécution peut être , il suspend donc son activité. Blocked —Un thread Java peut être bloqué dans l’attente d’une ressource.

—Un thread Java peut être bloqué dans l’attente d’une ressource. Terminated — Un thread peut être terminé.

Comment créer un Thread Java ?

Java nous offre deux possibilités:

Utiliser l’interface Runnable .

. Utiliser la classe Thread

Le multithreading en Java.

Dans un programme Java, nous pouvons créer plusieurs thread et les lancer en exécution parallèle.

Exemple:

Imaginons de créer une application pour browser qui permet de streamer des contenus vidéos par plusieurs utilisateur au même moment. la même application a aussi une chat ouverte pour discuter entre utilisateur du contenu vidéo en streaming. Notre programme aura donc un thread dédié au streaming vidéo et un autre thread dédié au fonctionnement de la chat.

C’est tout pour aujourd’hui’ hui dans la prochaine on ira dans la pratique créer quelques programmes java simples.