- Description et historique
- Avantages et inconvénients
- Avantages
- Inconvénients
- Quelques règles de grammaire et ponctuation
- Un commentaire sur les commentaires
- Les variables
- Les types de base
- Les entiers
- Les réels
- Les booléens
- Les caractères
- Les objets, ou classes
- La classe String
- Les autres classes
- Déclaration et initialisation de variables et d'objets
- Déclaration
- Initialisation
- Conversion entre types
- Les constantes
- Les tableaux
- Déclaration d'un tableau
- Initialisation d'un tableau
- Accès aux éléments d'un tableau
- Longueur du tableau
- Les opérateurs
- Arithmétiques
- D'Affectation
- Logiques
- Incrémentation et décrémentation
- Opérateurs au niveau des bits
- Opérateur ternaire
- Hiérarchie des opérateurs
- Branchements conditionnels
- If, else, lorsqu'un simple "oui" suffit.
- Switch case, pour plus de choix.
- Les boucles
- For
- While
- do ... while
- Les modificateurs
- Syntaxe de déclaration de fonctions et de classes
- Définition de classes
- Définition de méthodes
- Constructeur
- Méthodes
- La classe FontMetrics de Java
- Les techniques graphiques de Java
- Les structures de données en Java
Description et historique
Java est un langage assez récent. Il a été développé par Sun Microsystems en 1991. Ce langage a pour premier but d'être portable. En effet, un programme écrit et compilé en Java peut être exécuté aussi bien sous Linux, Windows, Unix ou MacOS. Ce qui lui permet d'être portable est
aussi ce qui cause, pour plusieurs, son plus grand défaut : il n'est pas très rapide. Cependant, plus la technologie avance, plus sa rapidité augmente.
Dans cette page, vous découvrirez toutes les bases nécessaires à la création d'applets et d'applications Java, soit : la déclaration et l'initialisation de variables, de constantes, les branchements conditionnels, les boucles, les différents opérateurs, les commentaires, et bien d'autres
choses.
Avantages et inconvénients
Avantages
- Java ne dépend d'aucune plate-forme
- Java est orienté objet
- Java est facile à apprendre
- Java aide à lutter contre les bogues et les virus
- Java supporte les nouveaux standards
Inconvénients
- Java n'est pas aussi rapide qu'un exécutable
- Java n'est pas aussi vaste que C/C++
- Java ne permet pas d'opérations de bas niveau
Quelques règles de grammaire et ponctuation
Voici quelques règles à observer et/ou erreurs à éviter en Java.
- Des () {} manquantes
- Pour éviter ce problème, prenez l'habitude d'écrire le caractère de fermeture immédiatement, avant d'aller écrire le code à l'intérieur
- Un ; pour terminer les phrases
- Chaque ligne en Java doit se terminer par un point-virgule;
- Imports oubliés
- Pour chaque objet définis, vous devez importer les classes n'étant pas dans le package de celle présente.
- Dès ereur d'èkryture
- Attention aux erreurs d'écriture, Java ne sait pas que vous vouliez écrire Applet au lieu de Aplet.
- Le CaSe SeNsItIvE
- Java est case sensitive, ce qui veut dire, que les variables var et Var ne sont pas du tout les mêmes
- Les noms de variables
- Le nom d'une variable ou d'une classe doit obligatoirement commencer par une lettre (A à Z, a à z, ou une autre lettre appartenant au jeu de caractères Unicode dont la valeur hexadécimale soit supérieure à H00C0), un caractère de soulignement (_) ou un dollar ($). Les caractères
suivants peuvent être des lettres, des caractères de soulignement, des dollars, ou des chiffres.
Un commentaire sur les commentaires
En Java, il existe 3 façons de placer des commentaires dans le code.
//La façon la plus courante, est celle-ci.
En ajoutant "//" devant le commentaire, le reste de la ligne est considéré comme un commentaire. Cependant, ce type de commentaire ne permet que les commentaires sur une ligne.
/*Un autre type de commentaire est celui-ci, il permet d'inclure un commentaire
sur plusieurs lignes*/.
Il suffit d'encadrer votre texte avec "/*" délimitant le début du commentaire, et "*/" délimitant la fin du commentaire.
/**Enfin, celui-ci est spécial*/
Ce type de commentaire est destiné au générateur de documentation Javadoc. Il suffit d'encadrer votre texte entre "/**" et "*/" Javadoc génère de la documentation API à partir du code. Je ne parlerai pas plus en profondeur de Javadoc sur cette page.
Les variables
En Java, chaques objet est considéré comme une variable. Cependant, on aura tendance à appeler les types de base (int, long, boolean, etc.) variables, et les types composites, objets. Les principales distinctions entre un type composite et un type de base sont les suivantes :
Aucune méthode ne peut être appliquée sur un type de base.
Les types de bases ne sont pas déclarés à l'aide de new
Aussi, on n'utilise pas les mots var ou const en Java (bien que le const soit réservé), pour définir une variable ou une constante. Il suffit les déclarer de la façon suivante, et ce, presque n'importe où dans le programme :
[type] [nom de variable];
Les types de variables de base
Les entiers
Java connais 4 types d'entiers : les byte, short, int et long.
| Type |
Taille |
Intervalle de valeurs |
| byte |
8 bits |
-128 à 127 |
| short |
16 bits |
-32768 à 32767 |
| int |
32 bits |
-2147483648 à 2147483647 |
| long |
64 bits |
-9223372036854775808 à 922337236854775807 |
Les types réels
Java comporte 2 types de réels : les float et les double.
| Type |
Taille |
Intervalle de valeurs |
| float |
32 bits |
1.20239846e-45 à 3.40282347e38 |
| double |
64 bits |
4.94065645841246544e-324 à 1.79769313486231570e308 |
Les booléens
Les boolean peuvent prendre la valeur true ou false. Si vous le désirez, vous pouvez aussi utiliser un nombre non-nul pour représenter true, et le nombre 0 pour représenter false.
Les caractères
En Java, les caractères sont définis par le type char. Java utilise le jeu de caractère 16 bits Unicode qui contient environ 34168 caractères.
Les objets, ou classes
En Java, chaque objet représente une instanciation d'une classe. On peut donc demander à chaque objet d'effectuer des méthodes distinctes.
La classe String
La classe String est un objet de base en Java. Par conséquent, sa déclaration diffère de celle des autres objets.
Les autres objets
Tout autre objet ou classe que vous créez vous-même se déclarent et s'initialisent de la même manière.
Déclaration et initialisation de variables et d'objets
Déclaration
La déclaration de variables de base et d'objets ne se fait pas de la même manière en Java.
Vous pouvez déclarer un type de base, de la manière suivante :
int i;
long l,time,test;
Vous pouvez déclarer des objets de la même façon, ex:
FileOutputStream FOS;
Socket s;
String chaine;
Initialisation
Pour initialiser un type de base, vous n'avez qu'à écrire :
i = 2;
l = 234141252;
Vous pouvez aussi initialiser vos variables dès la déclaration comme ceci :
int i = 2;
long l = 234567896543;
Cependant, initialiser un objet ne se fait pas de la même manière, vous devez utiliser l'opérateur new. Par exemple :
FOS = new FileOutputStream("data.txt");
s = new Socket("127.0.0.1",2135);
Encore une fois, vous pouvez l'initialiser lors de sa déclaration :
Socket s = new Socket("127.0.0.1",2135);
Il existe une exception à la règle d'initalisation, c'est le type String. En effet, pour initialiser une String, vous avez le choix entre les 2. Vous pouvez utiliser l'opérateur new pour déclarer une string à partir d'un type de base, ou tout simplement la déclarer comme un type de
base. ex:
String s = new String(2435);//Initialisation à partir d'un int
String s2 = "Hello World"; /*Initialisation directe, remarquez les guillements, qui
distinguent une string d'un autre type.*/
Conversion entre types
Il y a 2 manière de convertir les variables entre les différents types en Java. Pour les types de base, vous n'avez qu'à spécifier le type entre parenthèse en avant de la variable. ex:
float pi = 3.14159;
int pi2 = (int)pi;
Cette méthode de conversion se nomme un cast dans le langage. Dans le cas d'une conversion d'un réel à un entier, il est tronqué à la virgule.
Lorsque vous voulez convertir des objets entre eux, ou convertir un objet en un type de base, vous devez utiliser des méthodes spéciales, que chaque objet doit définir lui-même. Par exemple, les objet Integer, Double, Long, Byte, (ne pas confondre avec int, double, long et byte) etc. définissent
chacun une méthode pour passer au type de base correspondant. ex:
int i = Integer.parseInt("1234");
long l = Long.parseLong("2435464987654687954654321321654");
double d = Double.parseDouble("2413,325");
Il y a aussi la méthode que la plupart des objets ont : toString(). Cela renvoit une string qui représente l'objet.
Les constantes
Pour déclarer une constante en Java, vous n'avez qu'à ajouter le mot clé final en avant, lors de sa déclaration. ex:
final int i = 2;
final String s = "Version 2.0"
Par conséquent, leur initialisation doit se faire au moment de leur déclaration.
Les tableaux
Déclaration des tableaux
Un tableau se déclare de la même manière qu'une variable normale, à une exception près, vous devez inclure [] au nom du tableau, ou au type. Dans le cas d'un tableau à 2 dimensions, vous incluerez [][], à 3 dimensions [][][] ... Par exemple :
String commands[];
int[][] deuxdim;
Initialisation des tableaux.
Il y a deux méthodes pour initaliser un tableau :
- en utilisant new
- en initialisant directement les éléments du tableau
En utilisant new, vous ferez comme ceci :
String commands = new String[10];
int[][] deuxdim = new int[3][4];
Cela fixera le nombre de cellules disponible dans chaque dimension du tableau. Lorsque le tableau est créé, il n'y a plus possibilité de modifier ces dimensions.
Vous pouvez aussi initialiser les valeurs du tableau directement :
String commands = {"set","unset","modinfo","pass"};
int[][] deuxdim = {1,2,3,4}{3,4,5,6,7};
Chaque élément du tableau doit être du même type de variable que celui du tableau.
Accès aux éléments du tableau.
L'accès aux éléments du tableau se fait à l'aide de leur numéro de cellule. Il est important de savoir que ce numéro doit être supérieur ou égal à zéro, et inférieur à la grosseur du tableau (grosseur-1).
String commands[] = new String [2];
commands[0] = "set"; //Fixe la valeur de la première cellule à "set"
System.out.println(commands[0]); //Affiche la valeur de la première cellule.
commands[2] = "modinfo"; //ATTENTION, cette opération est non conforme, car elle
tente d'accéder à un élément non disponible du tableau.
commands[-1] = "pass"; //de même que celle-ci.
Longueur du tableau.
La longueur d'un tableau en Java s'obtient par la propriété length du tableau.
String[] commands = new String[4];
int len = commands.length //Remarquez que cela s'utilise sans les []. Retourne 4.
Les opérateurs
Arithmétiques
Les opérateurs arithmétiques sont les suivants :
| Opérateur |
Signification |
Exemple (réponse) |
| + |
Addition |
2+3 (5) |
| - |
Soustraction |
4-2 (2) |
| / |
Division |
6/3 (2) |
| * |
Multiplication |
6*3 (18) |
| % |
Modulo (reste de la division entière) |
8%6 (2) |
Comme vous pouvez remarquer, il n'y a pas d'opérateur d'exponentiation, pour utiliser l'exponentiation, vous devrez utiliser la méthode pow de la classe Math. Math.pow(base,exposant);
Affectation
Les opérateurs d'affectation sont les suivants
| Expression |
Signification |
| x += y; |
x = x + y; |
| x -= y; |
x = x - y; |
| x /= y; |
x = x/y; |
| x *= y; |
x = x*y; |
| x %= y; |
x = x % y; |
| x &= y; |
x = x & y; |
| x |= y; |
x = x | y; |
| x <<= y; |
x = x << y; |
| x >>= y; |
x = x >> y; |
| x >>>= y; |
x = x >>> y; |
Logiques
Voici les opérateurs logiques de Java :
| Opérateur |
Signification |
Exemple |
| == |
Est égal à |
x == y |
| != |
Est différent de |
x != y |
| < |
Est plus petit que |
x < y |
| > |
Est plus grand que |
x > y |
| <= |
Est plus petit ou égal à |
x <= y |
| >= |
Est plus grand ou égal à |
x >= y |
| && |
ET logique |
(x == y) && (x != z) |
| || |
OU logique |
(x == y) || (x == z) |
| instanceof |
Retourne true si l'objet est de ce type, false sinon |
s instanceof String |
| ! |
Inverse la valeur booléenne (ex : !true = false, !false = true) |
!(x == y) |
Incrémentation et décrémentation
Comme en C++, il est possible d'incrémenter ou de décrémenter une variable avec respectivement ++ et --. Ces 2 opérateurs peuvent être placés en suffixe ou en préfixe. S'il est avant, la valeur est incrémentée/décrémentée avant d'être évaluée. S'il est après, elle est évaluée
et ensuite elle est incrémentée/décrémentée
int x = 1;
int y;
y = x++; //y = 1, x = 2
x = 1;
y = ++x; //y = 2, x = 2
Opérateurs au niveau des bits
| Opérateur |
Signification |
| & |
ET bit à bit |
| | |
OU bit à bit |
| ^ |
OU EXCLUSIF bit à bit |
| << |
Décalage à gauche bit à bit |
| >> |
Décalage à droite bit à bit |
| >>> |
Décalage à droite bit à bit et remplissage par des 0 |
| ~ |
Négation bit à bit |
Opérateur ternaire
L'opérateur ternaire aussi appelé opérateur conditionnel est là pour remplacer un simple if ... else. Il s'applique comme suit : test ? si_vrai : si_faux
String s = "j";
String s2;
s2 == La banane est (s == "j" ? "jaune." : "verte."); //s2 vaut : La banane est jaune.
s = "v";
s2 == La banane est + (s == "j" ? "jaune." : "verte."); //s2 vaut : La banane est verte.
Hiérarchie des opérateurs
Vous trouverez la hiérarchie des opérateurs dans l'Annexe A
Branchements conditionnels
Java possède 2 types de branchements conditionnels, ou instructions de teste : if ... else if ... else et switch (int||char) { case x : ... case : x2 ... default : ... }
If, else, lorsqu'un simple "oui" suffit.
If est une instruction qui permet de dire : Si x est égal à y, fait cela. Une instruction if se code comme suit :
if (expression opérateur expression) {
exécution1;
exécution2;
...
exécutionn;
}
Vous pouvez aussi, si vous n'avez qu'une commande à exécuter, ommettre les accolades :
if (expression opérateur expression)
exécution1;
ou
if (expression opérateur expression) exécution1;
Après chaque if, vous pouvez mettre un else. Le else permet de dire : Sinon, fait ceci.
if (expression opérateur expression)
exécution;
else
exécution;
Comme vous avez pu le constater, vous pouvez fonctionner comme le if pour le else c'est à dire, inclure des accolades ou non. De la même manière, vous pouvez lui dire un else if (Sinon, si x == z, fait ça).
if (expression opérateur expression) exécution;
else if (expression2 opérateur expression2) exécution;
else exécution;
Voici maintenant un exemple de code comprenant ces instructions :
... //le système lit un chiffre et l'affecte à la variable de type int : x
if (x < 0) { System.out.println("Le chiffre entré est un chiffre négatif"); }
else if (x = 0) { System.out.println("Le chiffre entré est zéro"); }
else { System.out.println("Le chiffre entré est positif"); }
/*Ce programme demande un chiffre à l'utilisateur, et imprime une phrase selon
que le chiffre entré est négatif, positif ou égal à zéro.*/
Switch case, pour plus de choix.
L'instruction switch est une autre instruction pour effectuer des testes. Elle permet de tester un char ou un int pour savoir s'il est égal à une des valeurs spécifiées par les case. Par exemple :
char c = 'a';
swith (c) {
case 'a' :
System.out.println("Le caractère est \'a\'");
break;
case 'b' :
System.out.println("Le caractère est \'b\'");
break;
default :
System.out.println("Je ne connais pas ce caractère");
}
Dans cet exemple, le switch est fait sur un char. Le premier bloc teste si c est égal à 'a' (le caractère a). Comme il est égal, il exécute le bloc. Remarquez dans le System.out.println(), la manière d'écrire un "'", vous devez inclure un "\" devant.
L'instruction break à la fin du bloc dit au switch de ne pas continuer les autres tests et de sortir immédiatement du switch. Le default permet de faire des opérations si aucun case n'a arrêté l'exécution du teste avec un break.
Comme vous pouvez le remarquer, on n'utilise pas de accolades dans une instruction case. Seulement des ":".
L'instruction de teste switch ne peut s'effectuer que sur des int et des char.
Les boucles
Java offre 3 sortes de boucles : for(initialisation;test;incrementation), while(condition) et do ... while(condition).
For
La boucle for est faite pour répéter un bloc d'instructions un certain nombre de fois. C'est pourquoi il s'utilise avec une instruction d'incrémentation (ou de décrémentation). Par exemple :
for (int i = 0; i<5; i++) {
...
}
Dans cet exemple, l'instruction commence par faire une variable de type int égale à 0. Ensuite, il teste si i est plus petit que 5, l'incrémente, et effectue les opérations entre accolades.
While(condition)
La boucle while() est faite pour être exécutée tant et aussi longtemps qu'une condition est vérifiée. Par exemple :
String inStr;
while((inStr = in.readLine()) != null) {
analyse(inStr);
}
Dans cet exemple, la boucle while effectue 2 actions, premièrement, elle fixe la valeur de inStr à la prochaine ligne du InputStream (in), et deuxièmement, elle teste si cette valeur est nulle (false) ou non (true). Dans le cas où elle est égale à null, la boucle n'est pas effectuée. Si elle
n'est pas égale à null, la boucle est effectuée. Veuillez prendre en note que dans ce genre de boucle, il se peut que les instructions à l'intérieur de la boucle ne soient pas exécutées du tout.
Do ... while(condition)
La forme de boucle do ... while(condition) est un peu différente des 2 autres, par le fait que le code à l'intérieur de la boucle est au moins exécuté une fois. Voici un exemple :
String inStr = "Démarrage";
do {
analyse(inStr)
} while((inStr = in.readLine()) != null)
Dans cet exemple, le code anaylse(inStr) est exécuté au moins une fois, soit la fois où inStr vaut "Démarrage". Elle fonctionne de la même manière que while() à cette exception près.
Les modificateurs
Les modificateurs sont principalement utilisés en Java pour augmenter ou réduire la visibilité d'un objet face aux autres classes, pour déclarer une méthode ne pouvant pas être redéfinie, pour déclarer des constantes. Il existe les modificateurs suivants :
- private
- protected
- (package)
- public
- abstract
- final
- volatile
- synchronized
- transient
- native
Les 4 premiers sont ceux permettant de fixer la visibilité d'un objet :
- private
- Une classe, méthode, ou variable déclarée private n'est accessible uniquement à l'intérieur de la classe présente.
- protected
- Une classe, méthode, ou variable protected est accessible de la classe mère, ainsi que de toutes autres classes héritant de cette classe. Elles ne sont pas accessibles de l'extérieur
- (package)
- Une classe, méthode, ou variable package est visible de toutes autres classes à l'intérieur du même package, mais pas de l'extérieur du package. À noter : puisque c'est la définission par défaut, le modificateur package n'existe pas.
- public
- Une classe, méthode, ou variable public est accessible de n'importe quelle classe, même externe au package présent.
On utilise abstract pour déclarer une méthode (ou classe) abstraite, une méthode ne comportant aucun code, elle est faite uniquement pour être redéfinie.
On utilise final lorsqu'on veut qu'une méthode ou variable ne soit plus redéfinie, vous n'avez pas le droit de changer la valeur d'une variable finale, et vous ne pouvez pas redéfinir une méthode finale.
Les modificateurs synchronized et volatile sont utilisés dans le cadre de Multithreading. Pour des raisons de simplicités, nous n'aborderons pas ces modificateurs ici.
Les 2 derniers ne seront pas non plus étudiés ici, nous dirons seulement que le modificateur native sert à définir des méthodes natives, et le modificateur transcient fait partie des fonctionnalités avancées et ne sera pas utile au programmeur débutant.
Syntaxe de déclaration de fonctions et d'objets
Définition de classes
En Java, pour déclarer une nouvelle classe, vous devez faire comme suit :
[modificateur] class <nom> extends [classe mère] implements [interface 1] [interface 2] [interface ...] { ... }
Par exemple :
public class aNewClass extends thread { ... }
class anOtherNewClass implements Runnable { ... }
Dans ces 2 exemples, la classe étend une autre classe, ou en implémente une. Lorsqu'une classe étend une autre classe, elle a accès à toutes les variables et fonctions de type protected, package, ou public. Ce qui signifie que vous pouvez redéfinir n'importe quelle méthodes d'un de ces types.
Lorsque vous implémentez une autre classe, c'est parce que cette classe est une interface, une classe abstraite ne comportant uniquement des méthodes abstraites, et vous devez redéfinir toutes ses méthodes.
Définition de méthodes
Constructeur
Chaque objet en java possède son constructeur : la méthode qui permet d'initaliser l'objet avec les arguments fournis. Le constructeur porte toujours le nom même de la classe. Si une classe ne possède aucun constructeur, alors elle hérite du constructeur par défaut de la classe object
: nom_de_classe().
Vous pouvez aussi surcharger le constructeur, ce qui signifie que vous pouvez faire un objet avec divers objets, par exemple, si vous voulez permettre de créer aNewClass avec soit : un String, soit : un int, vous procéderez comme suit :
public class aNewClass {
aNewClass(String s) { ... }
aNewClass(int i) {...}
}
Méthodes
La définition de méthodes se fait comme suit :
[modificateur] <type de retour> <nom(arguments)>
Chaque fonction, en Java a un type de retour : le type d'objet qu'elle retourne. Si une fonction ne doit rien retourner, alors le type de retour est void.
Vous pouvez redéfinir une méthode étendue tout simplement en réécrivant son en-tête, par exemple, supposons que je veuille redéfinir la méthode run() de la classe thread dans un objet qui étant cette classe, je procèderais comme suit :
public class Telnet extends Thread {
public void run() { ... }
}
Annexe A
Hiérarchie des Opérateurs en Java
| Opérateur |
Commentaire |
| . [] () | Les parenthèses () groupent les expressions. Le point (.) permet d'accéder aux méthodes et les [] sont utilisés pour les tableaux |
| ++ -- | ~ instanceof | |
| new (type) expression | new permet de créer un nouvel objet, (type) permet de convertir dans un autre type. |
| * / % | Multiplication Division Modulo |
| + - | Addition Soustraction |
| << >> >>> | Décalages à gauche et à droite bit à bit |
| < > >= <= | Comparaison |
| == != | Égalités |
| & | ET. |
| ^ | OU exclusif. |
| | | OU. |
| && | ET logique |
| || | OU logique |
| ? : | Opérateur ternaire |
| = += -= *= /= %= ^= | Affectation diverses |
| &= |= <<= >>= >>>= | Affectations diverses (suite) |
|