les bases du langage java - page d'accueil / lirmm.fr...

24
Syntaxe/convention Classpath Package Résumé global Les bases du langage Java 1 / 27 Cours Java - F. Michel

Upload: others

Post on 13-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Les bases du langage Java

1 / 27Cours Java - F. Michel

Page 2: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Plan

1 Structure syntaxique et conventionsCommentairesMots réservésIdentifiantsLittérauxTypes primitifs

2 ClasspathDéfinitionSpécification

3 PackageDéfinitionCréation de package, compilation et exécutionUtiliser ses propres packages

2 / 27Cours Java - F. Michel

Page 3: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

CommentairesUne seule ligne : //

i n t i = 0 ; / / I n i t i a l i z e the loop v a r i a b l e

Plusieurs lignes : /* infos */

/∗∗ F i r s t , e s t a b l i s h a connect ion to the server .∗ I f the connect ion at tempt f a i l s , q u i t r i g h t away .∗/

Commentaires pour la javadoc : /** infos */

/∗∗∗ Upload a f i l e to a web server .∗∗ @param f i l e The f i l e to upload .∗ @return < t t > t rue </ t t > on success ,∗ < t t > fa l se </ t t > on f a i l u r e .∗ @author David Flanagan∗/

4 / 27Cours Java - F. Michel

Page 4: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Mots réservés

Tous les mots réservés sont en minuscules.

5 / 27Cours Java - F. Michel

Page 5: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Convention pour les identifiants

Pas d’accents dans le code !

Par convention :

Le nom des classes commencent toujours par une majuscule : e.g.Bidule⇒ donc les fichiers aussi !

le nom d’une variable, d’un attribut ou d’une méthode commence parune minuscule : e.g. int time ;

pour les noms de plus d’un mot : on utilise le Camel case :

exemples pour une classe : MaClasse , MonPremierObjetexemples pour un attribut ou une méthode : monAgeActuel ,maPremiereMethode

6 / 27Cours Java - F. Michel

Page 6: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Les littéraux

Les littéraux sont des valeurs qui peuvent apparaitrent directementdans le code Java.

Cela inclut :

les entiers naturels et les flottants : 1 1.0 1.2

les caractères : ’a’ ’2’

les chaînes de caractères : "a" "the one" "24"

les mots réservés true false (les valeurs booléennes) et null (l’objetnull)

7 / 27Cours Java - F. Michel

Page 7: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Types primitifs

Remarque

Tout le reste est "objet" en Java !

8 / 27Cours Java - F. Michel

Page 8: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Le classpath : qu’est-ce que c’est ?

C’est une variable d’environnement (OS) utilisée par la JVM.

Littéralement : « le chemin des classes » : les endroits du système defichiers où se trouvent les classes.

Plus exactement : les "endroits" où débutent des arborescences depackages (cf. section suivante)

Elle pointe sur :

des répertoires où se trouvent des arborescences de fichiers .classet/ou des fichiers « .jar » (Java Archive : compressée)

Utilisée par java et javac pour trouver les fichiers nécessaires(dépendances) à la compilation et à l’exécution (fichiers .class ou .jar ).

Spécifier le classpath est donc nécessaire pour :

charger les librairies utilisées pour la compilation et l’exécution

10 / 27Cours Java - F. Michel

Page 9: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Spécification explicite du classpath

Exemple avec un fichier source dans /home/joe/java/src/

Première solution : l’option -cp (-classpath) de javac et java

joe@iut :~$ javac / home / joe / java / src / HelloWorldApp . javajoe@iut :~$ java −cp / home / joe / java / src / HelloWorldAppHel lo World !joe@iut :~$

-cp permet à javac de trouver les dépendances, pas les sources !

javac n’utilise pas le classpath pour trouver les sources cibles :

joe@iut :~$ javac −cp / home / joe / java / src / HelloWorldApp . javajavac : f i l e not found : HelloWorldApp . javaUsage : javac <opt ions > <source f i l e s >use −help f o r a l i s t o f poss ib le op t ions

joe@iut :~$ javac −sourcepath / home / joe / java / src HelloWorldApp . java

11 / 27Cours Java - F. Michel

Page 10: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Spécification explicite du classpath

Deuxième solution (À ÉVITER) : régler définitivement le classpath enfaisant une variable d’environnement du système d’exploitation

Soit pour la session courante (la console)

Windows : SET CLASSPATH = . ;c :\ mesprog

Linux : CLASSPATH=. :∼/mesprog

Soit définitivement (comme pour le path)

Windows : propriétés du poste de travail -> avancé -> variablesd’environnement (nouveau) : CLASSPATH=. ;c :\ mesprog

Linux : dans le fichier .bashrc de votre racine :CLASSPTH=. :∼/mesprogexport CLASSPATH

12 / 27Cours Java - F. Michel

Page 11: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Classpath par défaut

Comment java et javac trouvent-ils les classes de base ? !

Pourquoi n’y-a-t-il pas besoin de régler le classpath pour le répertoirecourant ? !

Plusieurs variables ont des valeurs par défaut au démarraged’une JVM

sun.boot.class.path : JDKInstalDir. . . /jre/lib/rt.jar : ce fichier contienttoutes les classes de base, compilées et classées suivant leur package(sans ce fichier : plus rien !).

java.class.path : "." (répertoire courant). Le classpath contient pardéfaut le répertoire dans lequel la commande a été lancée (le workingdir ).

Remarque : les sources du langage sont aussi disponibles :

JDKInstal/sources.zip

13 / 27Cours Java - F. Michel

Page 12: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Package

Définition

Un package est un regroupement de classes conceptuellementcohérent par rapport à leurs fonctionnalités (ex : java.io java.util)

Un package définit ainsi un espace de nommage (permet d’éviter lesconflits de nom).

Les packages en Java

Plus de 4000 classes sont directement accessibles dans le JDK ! !

Elles sont classées dans des répertoires suivant leurs fonctionnalités.

Ces répertoires correspondent exactement aux packages

→ Le nom d’un package correspond exactement au répertoire oùse trouvent ses classes.

15 / 27Cours Java - F. Michel

Page 13: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Package

Utilisation d’une classe contenue dans un package

Pour pouvoir utiliser une classe il faut obligatoirement l’importerexplicitement en utilisant le mot clé import en début de fichier.

Pour que cela fonctionne, il faut donc que :

le classpath pointe sur un répertoire contenant un répertoire javacontenant lui-même un répertoire util dans lequel se trouve un fichierArrayList.class

16 / 27Cours Java - F. Michel

Page 14: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Package

Pour utiliser une classe, il faut absolument l’avoir importée !

Question ?

Alors, pourquoi peut-on utiliser la classe System (e.g.System.out.println) sans aucun « import » ? !

17 / 27Cours Java - F. Michel

Page 15: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Package

Réponse

tout le package java.lang est importé par défaut et en particulierObject !

18 / 27Cours Java - F. Michel

Page 16: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Créer ses propres packages

Règle d’or en Java

toute nouvelle classe doit impérativement se trouver dans un package !

utilisation du mot clé package en début de fichier (avant les imports)

Attention !

le fichier MonProg.java doit se trouver dans le répertoire prog

19 / 27Cours Java - F. Michel

Page 17: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Compilation et exécution

Dans un terminal

joe@iut :~$ pwd/ home / joe / mesprogjoe@iut :~$ cd progjoe@iut :~$ javac MonProg . javajoe@iut :~$ java MonProg

20 / 27Cours Java - F. Michel

Page 18: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Compilation et exécution

Dans un terminal

joe@iut :~$ pwd/ home / joe / mesprogjoe@iut :~$ cd progjoe@iut :~$ javac MonProg . javajoe@iut :~$ java MonProg

Question ?

Cela va-t-il marcher ?

21 / 27Cours Java - F. Michel

Page 19: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Compilation et exécution

Dans un terminal

joe@iut :~$ pwd/ home / joe / mesprogjoe@iut :~$ cd progjoe@iut :~$ javac MonProg . javajoe@iut :~$ java MonProg

Réponse : non !

Exception in thread "main"java.lang.NoClassDefFoundError :MonProg (wrong name : prog/MonProg)

22 / 27Cours Java - F. Michel

Page 20: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Compilation et exécution

Ne pas oublier le principe du classpath

Il faut que le classpath soit cohérent pour pouvoir exécuter !

Dans un terminal

joe@iut :~$ pwd/ home / joe / mesprogjoe@iut :~$ javac prog / MonProg . javajoe@iut :~$ java prog / MonProgh e l l o !joe@iut :~$ java prog . MonProgh e l l o !

23 / 27Cours Java - F. Michel

Page 21: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Utiliser ses propres packages

Pour utiliser ses propres packages depuis un autre package, il fautajouter le répertoire contenant le package désiré au classpath :

Pour compiler (depuis le répertoire au dessus de tp1) :

javac -cp ∼/mesprog tp1/NouveauProg.java

24 / 27Cours Java - F. Michel

Page 22: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Utiliser ses propres packages

Pour exécuter (depuis le répertoire au dessus de tp1) :

> java -cp . :∼/mesprog tp1.NouveauProg> nouveau> hello

Note : il faut inclure "." (répertoire courant) dans le cp car en modifiantsa valeur, on écrase celle par défaut.

25 / 27Cours Java - F. Michel

Page 23: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Utiliser ses propres packages

Pour exécuter (depuis n’importe où) :

> java -cp /cheminQuiMèneÀtp1 :∼/mesprog tp1.NouveauProg> nouveau> hello

26 / 27Cours Java - F. Michel

Page 24: Les bases du langage Java - Page d'accueil / Lirmm.fr ...fmichel/old/ens/java/cours/java_basics.pdf · Les bases du langage Java 1 / 27 Cours Java - F. Michel. Syntaxe/convention

Syntaxe/convention Classpath Package Résumé global

Résumé global

Le classpath

La variable classpath permet de spécifier où se trouvent des packages.

Elle peut contenir plusieurs entrées

Il est indispensable de la spécifier pour que le programme marche entoute circonstance.

Les packages

Les classes du langage Java sont organisées en packages (rt.jar).

le mot clé package permet de spécifier le package d’appartenanced’une classe.

Un bon programme est obligatoirement organisé en packages(structuration logique des classes).

27 / 27Cours Java - F. Michel