Chap1.3 - Un Programme Minimal en Java PDF
Chap1.3 - Un Programme Minimal en Java PDF
Chap1.3 - Un Programme Minimal en Java PDF
Avant d'utiliser les possibilités offertes par les classes et les objets en Java, apprenons à utiliser et
exécuter des applications simples Java ne nécessitant pas la construction de nouveaux objets, ni de
navigateur pour s'exécuter.
Comme Java est un langage orienté objet, un programme Java est composé de plusieurs classes, nous
nous limiterons à une seule classe.
On peut très grossièrement assimiler un programme Java ne possédant qu'une seule classe, à un
programme principal classique d'un langage de programmation algorithmique.
Une classe minimale commence obligatoirement par le mot class suivi de l'identificateur de la
classe puis du corps d'implémentation de la classe dénommé bloc de classe.
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 1/12
12/11/2020 Chap1.3 : Un programme minimal en Java
Comme en fait, une classe quelconque peut s'exécuter toute seule à condition qu'elle possède dans ses
déclarations internes la méthode main qui sert à lancer l'exécution de la classe (fonctionnement
semblable au lancement du programme principal).
Nous reprenons deux exemples de programme utilisant la boucle for, déjà donnés au chapitre sur les
instructions, cette fois-ci nous les réécrirons sous la forme d'une application exécutable.
Exemple1
class Application1
{
static void main(String[ ] args)
{ /* inverse d'une suite de caractère dans un tableau par
permutation des deux extrêmes */
char [ ] Tablecar ={'a','b','c','d','e','f'} ;
int i, j ;
System.out.println("tableau avant : " + String.valueOf(Tablecar));
for ( i = 0 , j = 5 ; i<j ; i++ , j-- )
{ char car ;
car = Tablecar[i];
Tablecar[i ]= Tablecar[j];
Tablecar[j] = car;
}
System.out.println("tableau après : " + String.valueOf(Tablecar));
}
}
Il est impératif de sauvegarder la classe dans un fichier qui porte le même nom (majuscules et
minuscules inclues) ici "Application1.java". Lorsque l'on demande la compilation (production du
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 2/12
12/11/2020 Chap1.3 : Un programme minimal en Java
Exemple2
class Application2
{
static void main(String[ ] args)
{ // recherche séquentielle dans un tableau
int [ ] table= {12,-5,7,8,-6,6,4,78,2};
int elt = 4, i ;
for ( i = 0 ; i<8 ; i++ )
if (elt= =table[i]) break ;
if (i = = 8) System.out.println("valeur : "+elt+" pas trouvée.");
else System.out.println("valeur : "+elt+" trouvée au rang :"+i);
}
}
Après avoir sauvegardé la classe dans un fichier qui porte le même nom (majuscules et minuscules
inclues) ici "Application2.java", la compilation de ce fichier "Application2.java" produit le fichier
"Application2.class" prêt à être interprété par notre machine virtuelle java.
Conseil de travail :
reprenez tous les exemples simples du chapitre sur les instructions de boucle et
le switch en les intégrant dans une seule classe (comme nous venons de le faire
avec les deux exemples précédents) et exécutez votre programme.
Les méthodes ou bien fonctions représentent une encapsulation des instructions qui déterminent le
fonctionnement d'une classe. Sans méthodes pour agir une classe ne fait rien de particulier, dans ce cas
elle ne fait que contenir des attributs.
Bien que Java distingue deux sortes de méthodes : les méthodes de classe et les méthodes d'instance,
pour l'instant dans cette première partie nous décidons à titre pédagogique et simplificateur de n'utiliser
que les méthodes de classe, le chapitre sur Java et la programmation orientée objet apportera les
compléments adéquats.
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 3/12
12/11/2020 Chap1.3 : Un programme minimal en Java
La notion de fonction en Java est semblable à celle du C et à Delphi, elle comporte une en-tête avec
des paramètres formels et un corps de fonction ou de méthode qui contient les instructions de la
méthode qui seront exécutés lors de son appel. La déclaration et l'implémentation doivent être
consécutives comme l'indique la syntaxe ci-dessous :
Syntaxe :
corps de fonction :
Sémantique :
Les qualificateurs sont des mots clefs permettant de modifier la visibilité ou le fonctionnement
d'une méthode, nous n'en utiliserons pour l'instant qu'un seul : le mot clef static permettant de
désigner la méthode qu'il qualifie comme une méthode de classe dans la classe où elle est
déclarée. Une méthode n'est pas nécessairement qualifiée donc ce mot clef peut être omis.
Une méthode peut renvoyer un résultat d'un type Java quelconque en particulier d'un des types
élémentaires (int, byte, short, long, boolean, double, float, char) et nous verrons plus loin
qu'elle peut renvoyer un résultat de type objet comme en Delphi. Ce mot clef ne doit pas être
omis.
Il existe en Java comme en C une écriture fonctionnelle correspondant aux procédures des
langages procéduraux : on utilise une fonction qui ne renvoie aucun résultat. L'approche est
inverse à celle du pascal où la procédure est le bloc fonctionnel de base et la fonction n'en est
qu'un cas particulier,. En Java la fonction (ou méthode) est le seul bloc fonctionnel de base et la
procédure n'est qu'un cas particulier de fonction dont le retour est de type void.
La liste des paramètres formels est semblable à la partie déclaration de variables en Java (sans
initialisation automatique). La liste peut être vide.
Le corps de fonction est identique au bloc instruction Java déjà défini auparavant. Le corps de
fonction peut être vide (la méthode ne représente alors aucun intérêt).
L'appel de méthode en Java s'effectue très classiquement avec des paramètres effectifs dont le
nombre doit obligatoirement être le même que celui des paramètres formels et le type doit être soit le
même, soit un type compatible ne nécessitant pas de transtypage.
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 5/12
12/11/2020 Chap1.3 : Un programme minimal en Java
Dans tous les langages possédant la notion de sous-programme (ou fonction ou procédure), il se pose
une question à savoir, les paramètres formels décrits lors de la déclaration d'un sous-programme ne
sont que des variables muettes servant à expliquer le fonctionnement du sous-programme sur des
futures variables lorsque le sous-programme s'exécutera effectivement.
Resituons la compatibilité des types entier et réel en Java. Un moyen mémotechnique pour retenir cette
compatibilité est indiqué dans les figures ci-dessous, par la taille en nombre décroissant de bits de
chaque type que l'on peut mémoriser sous la forme "qui peut le plus peut le moins" ou bien un type à
n bits accueillera un sous-type à p bits, si p est inférieur à n.
Un paramètre effectif transmis au sous-programme appelé est en fait un moyen d’utiliser ou d’accéder
à une information appartenant au bloc appelant (le bloc appelé peut être le même que le bloc appelant,
il s’agit alors de récursivité).
En Java, il existe deux modes de transmission (ou de passage) des paramètres (semblables à Delphi).
Le passage par valeur uniquement réservé à tous les types élémentaires (int, byte, short, long,
boolean, double, float, char).
Remarque :
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 7/12
12/11/2020 Chap1.3 : Un programme minimal en Java
Le choix de passage selon les types élimine les inconvénients dûs à l'encombrement
mémoire et à la lenteur de recopie de la valeur du paramètre par exemple dans un
passage par valeur, car nous verrons plus loin que les tableaux en Java sont des objets
et qu'ils sont donc passés par référence.
Les méthodes en Java peuvent renvoyer un résultat de n'importe quel type élémentaire ou objet. Bien
qu'une méthode ne puisse renvoyer qu'un seul résultat, l'utilisation du passage par référence d'objets
permet aussi d'utiliser les paramètres de type objet d'une méthode comme des variables d'entrée/sortie.
En Java le retour de résultat est passé grâce au mot clef return placé n'importe où dans le corps de la
méthode.
Syntaxe :
Sémantique :
L'expression lorsqu'elle est présente est quelconque mais doit être obligatoirement du même type
que le type du résultat déclaré dans l'en-tête de fonction (ou d'un type compatible).
Lorsqu'il n'y a pas d'expression après le return, le compilateur refusera cette éventualité sauf si
vous êtes dans une méthode-procédure (donc du type void), le return fonctionne comme un
break pour la méthode et interrompt son exécution.
Exemple de méthode-procédure
class Application7 Appel de la méthode procedure
{ static void main(String[ ] args)
{ Dans le cas du premier appel (x
int a = 0 ; ==0) est true donc ce sont les
procedure ( a ); instructions:
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 8/12
12/11/2020 Chap1.3 : Un programme minimal en Java
Java est un langage à structure de blocs ( comme pascal et C ) dont le principe général de visibilité est :
Toute variable déclarée dans un bloc est visible dans ce bloc et
dans tous les blocs imbriqués dans ce bloc.
Le masquage des variables n'existe que pour les variables déclarées dans des méthodes :
Il est interdit de redéfinir une variable déjà déclarée dans une
méthode soit :
Les variables définies (déclarées, et/ou initialisées) dans une classe sont accessibles à toutes les
méthodes de la classe, la visibilité peut être modifiée par les qualificateurs public ou private que nous
verrons au chapitre POO.
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 9/12
12/11/2020 Chap1.3 : Un programme minimal en Java
Contrairement à ce que nous avions signalé plus haut nous n'avons pas présenté un exemple
fonctionnant sur des méthodes de classes (qui doivent obligatoirement être précédées du mot clef
static), mais sur des méthodes d'instances dont nous verrons le sens plus loin en POO. Remarquons
avant de présenter le même exemple cette fois-ci sur des méthodes de classes, que quelque soit le
genre de méthode la visibilité des variables est identique.
Les variables définies dans une méthode (de classe ou d'instance) subissent les règles classiques de la
visibilité du bloc dans lequel elles sont définies :
Elles sont visibles dans toute la méthode et dans tous les blocs imbriqués dans cette
méthode et seulement à ce niveau (les autres méthodes de la classe ne les voient pas),
c'est pourquoi on emploie aussi le terme de variables locales à la méthode.
Reprenons l'exemple précédent en y adjoignant des variables locales aux deux méthodes f et g.
static int f (int x, int a ) - Dans la méthode f, char car ='u'; est une
{ char car ='u'; variable locale à la méthode f, le
.... paramètre inta masque la variable de
return 3*x-a; classe static int a.
}
Les variables locales char car n'existent
} que dans la méthode où elles sont
définies, les variables "car" de f et celle
de g n'ont aucun rapport entre elles, bien
que portant le même nom.
Les variables définies dans des blocs du genre instructions composées, boucles, try..catch ne sont
visibles que dans le bloc et ses sous-blocs imbriqués, dans lequel elle sont définies.
Toutefois attention aux redéfinitions de variables locales. Les blocs du genre instructions composées,
boucles, try..catch ne sont utilisés qu'à l'intérieur du corps d'une méthode (ce sont les actions qui
dirigent le fonctionnement de la méthode), les variables définies dans de tels blocs sont
automatiquement considérées par Java comme des variables locales à la méthode. Tout en respectant à
l'intérieur d'une méthode le principe de visibilité de bloc, Java n'accepte pas le masquage de variable à
l'intérieur des blocs imbriqués.
if (a < 7)
{int b = 8;
b = 5-a+i*b;
La variable de classe "a" définie dans
}
static int a = 10; est masquée dans la
else b = 5-a+i*b; méthode f dans le bloc imbriqué for.
}
La variable de classe "b" définie dans
return 3*x-a+b; static int b = 2; est masquée dans la
} méthode f dans le bloc imbriqué if.
}
Dans l'instruction { intb = 8; b = 5-a+i*b;
} , c'est la variable b interne à ce bloc qui
est utilisée car elle masque la variable b
de la classe.
class ExempleVisible5 {
Remarquons que le principe de visiblité des variables adopté en Java est identique au principe inclus
dans tous les langages à structures de bloc y compris pour le masquage, s'y rajoute en Java
uniquement l'interdiction de la redéfinition à l'intérieur d'une même méthode (semblable en fait, à
l'interdiction de redéclaration sous le même nom, de variables locales à un bloc).
https://rmdiscala.developpez.com/cours/LesChapitres.html/Java/Cours1/Chap1.3.htm 12/12