Najib Tounsi
Ecole Mohammadia d'Ingénieurs,
Rabat 
Année 2017/2018
1ère année Génie Informatique
Le langage se prête bien à la programmation avec les types abstraits de données.
public class Pile {
//
// Déclarations des attributs de la pile
//
static final int MAX = 8;
char[] t;
int top;
//
// Programmation des opérations (méthodes) de la pile
//
public Pile(){
// Initialise une pile vide
t = new char[MAX];
top = -1;
}
public void empiler(char c){
// Empile le caractère donné
if (!estPleine())
t[++top] = c;
else
System.out.println("Pile pleine");
}
public char sommet(){
// Retourne le caractère au sommet de la pile
if (!estVide())
return t[top];
else {
System.out.println("Pile vide Sommet");
return '\0';
}
}
public void depiler(){
// décapite la pile (retire le sommet )
if (!estVide())
top--;
else
System.out.println("Pile vide Depiler");
}
public boolean estVide(){
// Teste si la pile est vide
return (top < 0);
}
public boolean estPleine(){
// teste si la pile est pleine
return (top >= (MAX - 1));
}
}; // Fin class Pile
A noter:
t + indice sommet de
pile top) de la pile et programmation des
méthodes.
Remarque: Dans ce dernier cas, il est possible de
définir plusieurs implantations (représentations) pour un
même TAD (spécification abstraite).
Un programme principal (classe avec fonction main.)
Lire un mot et imprimer son image miroir.
public class TestPile {
static public void main(String args[]){
// Imprime l'mage miroire d'un mot
char c;
Pile p = new Pile();
// On lit les lettres et on les empile
while ((c=Support.readChar()) != '#') {
p.empiler (c) ;
if( p.estPleine()) break;
}
// On depile les lettres et on les imprime
while (!p.estVide()) {
c = p.sommet();
System.out.println (c);
p.depiler();
}
}
}
t[]
et une variable top.p de classe (type) Pile.new Pile().p.empiler(c), p.sommet()
etc. sont les appels aux fonctions (méthodes)
de manipulation de l'objet p.p.empiler(c) est appelée, le
corps de la méthode est exécutée (avec t[++top] = c;
), où t et top sont les données
représentant l'objet p sur lequel s'effectue de
l'appel.p n'ont pas à savoir
comment p réagit à un message ( est-ce qu'il
fait t[++top] = c; ou autre.) Ce qui
compte c'est l'effet final de l'envoi du message, i.e.
L'empilement de c sur p.main est elle même une fonction
enveloppée (déclarée) dans une classe. Mais elles est static.
(Voir plus tard).Dans la suite de ce chapitre, on va s'intéresser à l'aspect programmation procédurale du langage Java
Programme main dans une classe HelloWorld (fichier HelloWorld.java)
// Mon premier programme Java
class HelloWorld {
static public void main(String args[]){
System.out.println("Hello, World");
}
}
void
main ().class HelloWorld.HelloWorld.java
. Même nom que la classe ici.System.out.println("Hello, World");
qui imprime ses arguments et va à la ligne.// introduit un commentaire jusqu'à la fin de
la ligne./* permet un commentaire sur plusieurs lignes */.Programme qui lit un nom et une température en Celcius,
convertit cette dernière en Fahrenait et affiche bonjour avec
cette nouvelle valeur. (source Bonjour.java)
import java.util.Scanner;
class Bonjour {
static public void main(String args[]) {
Scanner clavier = new Scanner(System.in);
int c;
String nom;
double f;
// Partie lecture de données
System.out.print("Quelle est votre nom?: ");
nom = clavier.nextLine();
System.out.print("Quelle t° fait-il aujourd'hui?: ");
c = clavier.nextInt();
// Partie calcul
f = 9./5 * c + 32;
// Partie sortie des résultats
System.out.println("Bonjour " + nom);
System.out.print("Il faut " + c + "° Celsius,");
System.out.println(" soit "+ f + "° Fahrenait.");
}
}
int et double.
Types scalaires.byte, short,
char, int, long,
float, double, boolean.String. Classe prédéfinie
en réalité.Scanner (du package java.util)
pour la lecture de données (voir travaux dirigés)nextInt(), nextDouble(), nextLine()
... sont des méthodes de cette classeprintln() vs
print(). Impression avec ou sans saut de ligne.+ (de concaténation) pour imprimer
plusieurs données.
On compile et on exécute (en mode ligne commande)
$ javac Bonjour.java
$ java Bonjour
Quelle est votre nom?: Ali
Quelle t° fait-il aujourd'hui?: 17
Bonjour Ali
Il faut 17° Celcius, soit 62.6° Fahrenait.
$ _
javac sert à compiler le
fichier source Bonjour.java
.java sert à exécuter la
méthode main de la
classe Bonjour qui vient d'être compilée.
Exception in thread "main" java.lang.NoSuchMethodError:
mainf
= 9./5 * c + 32 , on a écrit 9./5 pour
que 9 ÷ 5 donne un réel double précision. L'expression est
alors évaluée en réel double.int i;
double d;
i = 1.23; // Erreur: Javac trouve un double là où il faut un
// int. En effet, 1.23 est un littéral réel double.
d = 2; // OK 2.0, conversion implicite
i = 3; // OK
d = 1.23; // OK
i = d; // Idem. Erreur: risque de perte de précision.
// d peut contenir un réel très précis.
d = i; // OK 3.0, conversion implicite aussi.
i = (int) -1.23; // OK valeur tronquée i = -1.
i = (int) d; // idem, conversion (troncature) forcée (cast)
int i = 2 * "A"; est une erreur.double
d = 123; .int
i = (int) d; .i = 6 / 2.5; // erreur car calcule en
double ensuite perte de précision lors de
l'affectation.
i = 6 / (int) 2.5; // OK. i = 3
i = (int) (6 / 2.5); // OK i = 2 ! Integer, Double
(noter la première lettre en majuscule), Character
etc... (appelées Wrappers)
permettant de considérer les types primitifs comme des
classes. Avec méthodes de conversions entre autres.
Il ne convient pas toujours de parler de type de données pour un langage de classes. Néanmoins, il convient de distinguer, pour des raisons de performance, le traitement des données élémentaires des autres objets. Il y a deux genres de variables en Java:

int i = 45;

Pile maPile = new
Pile(); int p[] = new
int [7];

Boolean, Byte, Integer,
Double etc... Ils jouent un intérêt particulier
dans la manipulation des types primitifs comme objets (e.g.
leur appliquer des méthodes ou les passer en paramètres là où
il faut un Object).O,
false ou null selon le cas.
Voir les constructeurs par défaut plus loin.char p[] =
new
char[20];int t[] =
{1,2,5};
String fournie en Java.
Peuvent être considérées aussi comme type de base de Java.boolean.byte, short, int,
long et char.float et double.boolean a deux valeurs: true
et false.byte est un entier sur 8 bits
compris entre -128 et 127 inclus.short est un entier sur 16
bits compris entre -32.768 et 32.767 inclus. Avec le
type byte, peut servir pour économiser de la mémoire dans
les grands tableaux.int est un entier sur 32
bits compris entre -2.147.483.648 et 2.147.483.647
inclus. C'est le type d'entier généralement utilisé.long est un entier sur 64
bits compris entre -9.223.372.036.854.775.808 et
9.223.372.036.854.775.807 inclus.float est un réel simple précision
sur 32 bits. Valeur par défaut = 0. A utiliser pour gagner
de la place mémoire pour de grands tableaux.double est un réel double
précision sur 64 bits. Valeur par défaut = 0. C'est le
type de réels généralement utilisé.boolean qui n'a que les deux
valeurs true et false. char est un caractère Unicode
(UTF-16) sur 16 bits.'\uxxxx'
où xxxx est la notation hexadécimale de la valeur.char c = '\u0628'; ou c = 'ب';boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10_000;
int i = 20;
long l = 5_000_000_000L;
long si
suivie de L (ou l). _ de séparation des milliers peut
être mis partout au milieu des chiffres, pour une meilleure
lisibilité.0x
(resp. 0b)int decVal = 26;
int hexVal = 0x1a;
int binVal = 0b11010;
float ou double)
peuvent s'exprimer en notation scientifique (avec la lettre E
ou e pour l'exposant), ou utiliser les lettres F
ou f (pour flottant), ou la lettre D
ou d (pour double, la cas par défaut).double d1 = 123.4
double d2 = 1.234e2; // même valeur en notation scientifique
float f1 = 123.4f;
float f = 1234; // OK. Conversion de int vers float.
float f = 123.4; // erreur. Perte de précision.
//123.4 constante double précision.
// utiliser 123.4f
'a', '%',
'\t', '\\', '\'', '\u03a9',
'\uFFFF', '\177', 'Ω',
'', 'é', 'ج'
-encoding
utf8 pour faire accepter les caractères non
US_ASCII (pas nécessaires après Java5).'\n' au lieu de la
notation Unicode '\u000a' correspondante.
Les séquences escape
Unicode sont traitées et remplacées avant compilation. '\u000a'
devient saut de ligne dans le source. D'où un risque d'erreur
de compilation.char.
"" // chaîne vide
"\"" // chaîne avec un seul car. "
"This is a string" // chaîne avec 16 caractères
"This is a " + // une expression constante String,
"two-line string" // formée de deux littéraux
String.
Donc une référence à une instance de classe String.null. Peut être
affectée à n'importe quelle variable référence.int i = 'A';
// conversion de char vers int (i=65)float f ; double d = 1234.567890;f = d // Erreur perte de
précisionf = (float) d; // OK mais f =
1234.567871 String.
L'opérateur de concaténation + appliqué à une chaîne et un
autre objet primitif, convertit cet objet vers une chaîne.byte à short, int,
long, float, ou doubleshort à int, long,
float, ou doublechar à int, long,
float, ou double
char promu directement vers int
et non pas vers shortint à long, float,
ou doublelong à float ou doublefloat à doublelong i =
25; // int vers long OK float.
int i = 1234567890;float f = i;
// int vers float OK.
// ici f vaut 1.23456794E9 et (int)f vaut 1234567936
String.String s1 = "Douze = " + 12;
// s1 = "Douze = 12"
String s2 = "" + 12; // s2 = "12"
valueOf() de String.String s2 =
String.valueOf(i);
toString() de chaque sous-type
de Number. Exemple:int i;
double d;
String s3 = Integer.toString(i);
String s4 = Double.toString(d);int
vers Integer , de float vers Float,
de char vers Character, etc. c'est
à dire d'un type primitif vers le type Wrapper correspondant.Integer I = new Integer(45); // I = 45 // Boxing de 45
int i = I.intValue (); // i est aussi 45 // Unboxing de I
I
= i; ou i = I; sans passer par new
Integer ou par intValue().= Simple assignment operator
+ Additive operator (also used for String concatenation)
- Subtraction operator
* Multiplication operator
/ Division operator
% Remainder operator
+ Unary plus operator; indicates positive value
(numbers are positive without this, however)
- Unary minus operator; negates an expression
++ Increment operator; increments a value by 1
-- Decrement operator; decrements a value by 1
! Logical complement operator; inverts the value of a boolean
== Equal to
!= Not equal to
> Greater than
>= Greater than or equal to
< Less than
<= Less than or equal to
&& Conditional-AND
|| Conditional-OR
?: Ternary (shorthand for if-then-else statement)
instanceof Compares an object to a specified type
~ Unary bitwise complement
<< Signed left shift
>> Signed right shift
>>> Unsigned right shift
& Bitwise AND
^ Bitwise exclusive OR
| Bitwise inclusive

int.[].int ai[]; // tableau d'entiers. (Vecteur)
short[] as, ab; // 2 tableau de short.
short[][] matrice; // tableau deux dimension de short.
int[][][] cube; // tableau trois dimension de int.
[] peut apparaître avec le type
ou avec la variable (ou les deux, non recommandé).int[] ai, mi []; // Notation mixte. Equivalent à
int ai[], mi [][]; // Equivalent aussi à
int [] ai;
int [][] mi; // :-)
[] font plutôt partie du
type. Par convention doivent apparaitre avec le type. Notation
des deux dernières lignes.
int[] ai = new int[5]; // ai tableau de 5 entiers.
// La dimension est obligatoire
int[] ai; // ai est ici juste une référence
ai = new int[5]; // ai désigne un tableau de 5 entiers.


ai = new int[5];
...
ai = new int [10];
ai[0] = 2; // premier élément est 2
ai[1] = 3; // deuxième élément est 3
ai[2] = -1; // etc.
System.out.println(ai.length); // imprime 5
int m[][] = new int [2][3]; // 2 lignes et 3 colonnes
m[0][0] = 11;
m[1][2] = 23;
//etc.
System.out.println(m.length); // 2 nombre de lignes
System.out.println(m[1].length); // 3 nombre de colonnes
// (dans la ligne 2, en fait)
int[] factorielle = { 1, 1, 2, 6, 24, 120, 720, 5040 };
char aoc[] = { 'c', 'e', ' ', 'n', '\'', 'e', 's', 't',
' ', 'p', 'a', 's', ' ', 'u', 'n', 'e',
' ', 'c', 'h', 'a', 'i', 'n', 'e'};
String[] aos = { "array", "of", "String", };
{ }.int[][] m = {{1, 2, 3},
{10, 20, 30},
}; // matrice à 2 lignes et 3 colonnes.
String[][] noms = {
{"M. ", "Mme ", "Mlle"},
{"BenHlima", "BenAli"}
}; // ici il y a 2 lignes, mais de longueurs différentes
Mlle"), par
contre noms [1][2] est un débordement de tableau (3e
élément de la ligne 2).String [] noms = {"Ali", "Amina"};
String [] mesNoms = new String [3];
mesNoms = noms;
noms [1] = "Fatima";,
la valeur mesNoms
[1] a changé aussi pour "Fatima" .public static void arraycopy( Object src, int srcPos,
Object dest, int destPos, int length)
src et le
tableau cible dest, l'indice du début de la zone
à copier, l'indice de l'endroit dans le tableau final où doit
se faire la copie et la taille de la zone à copier.

String.int[][] m = new int[2][]; // Creation deux références lignes
// m[0] et m[1].
m[0] = new int[3]; // Création trois éléments entiers en ligne 1
m[1] = new int[2]; // Création deux éléments entiers en ligne 2
// Tous initialisés à nulles
String.String[] s = new String[3]; // trois éléments tous égaux à null.
s[1] = new String("toto"); // le deuxième élément est une
// référence à "toto"
Point)Point [] p = new Point [10]; // vecteur p de 10 Points
for (int i=0; i<10; i++)
p[i] = new Point(); // instanciation de chaque Point
new Type
[] {liste d'objets};
String s [] = new String [] {"abc", "def"};
String initialisé aux valeurs fournies.
Ce qui équivaut à:String s[] = new String[2];
s[0] = "abc";
s[1] = "def";
int t [] = new int[] { 11, 23, 45 };
Point p [] = {new Point(1,2), new Point(2,3)}
String.String. Le plus simple
c'est par une contante entre double quotes.String salut = "Bonjour";
String salut = new String ("Bonjour");
une instance d'un objet se crée par new, et cela peut se faire à partir de plusieurs sources en paramètre. Ici à partir d'un littéral.
String n'est pas la même chose qu'un
tableau de char. char [] bonjour = {'b', 'o', 'n', 'j', 'o', 'u', 'r'};
String salut = bonjour; // erreur compilation: incompatible types
char [] bonjour = {'b', 'o', 'n', 'j', 'o', 'u', 'r'};
String salut = new String (bonjour); // :-)
StringString sont des objets immuables
(ang. immutable),
c'est à dire ils ne changent pas. Quand on manipule une
chaîne, par conacténation par exemple (opérateur +),
c'est une nouvelle chaîne qui est créée comme résultat de
l'opération.String s = "Bonjour";
s = s + " Ali"; // nouvelle chaîne "Bonjour Ali" désignée par s.
Strings sont "internés" (interned).String.intern().int
length()String palindrome = "Dot saw I was Tod";
int len = palindrome.length(); // len vaut 17.
int charAt(int index).char c;
String salut ="Bonjour";
c = salut.charAt(2); // c devient 'n'
doT saw I was toD"String
concat(String str).String nom = " Ali";
String s = salut.concat(nom). // s est "Bonjour Ali"
"bon".concat("jour") // retourne la chaîne "bonjour"
+.salut + " Ali"
salut + " " + "Ali"
"La racine de 2 est " + Math.sqrt(2)
// donne "La racine de 2 est 1.4142135623730951"
+ convertit vers String
son autre opérande numérique.+ est associatif à gauche. a
+ b + c
est
(a + b)
+ c.3 + 4 + " chats" // est la chaîne "7 chats"
"chats " + 4 + 3 // est la chaine "chats 43"
Méthodes indexOf() et lastIndexOf(). Recherche de caractère ou sous-chaîne dans une chaîne.
int indexOf(int car) et int
indexOf(int car, int debut).int lastIndexOf(int car) et int
lastIndexOf(int car, int debut).int indexOf(String mot) et int
lastIndexOf(String mot, int debut)"."alibaba".indexOf('b') // retourne 3
"alibaba".indexOf('b', 4) // retourne 5
"alibaba".lastIndexOf('a') // retourne 6
"alibaba".lastIndexOf('a', 5) // retourne 4

Méthode substring().
String s ="/users/me/hello.java";
int dot = s.lastIndexOf('.');
int sep = s.lastIndexOf('/');
System.out.println (s.substring(dot+1)); // donne java
System.out.println (s.substring(sep+1,dot)); // donne hello
StringBuffer
contient une chaîne dont le contenu et la longueur peuvent
varier.StringBuffer
sont append
() et insert
(), qui permettent de rallonger une chaîne ou y insèrer
quelque chose. Méthodes surchargées pour accepter plusieurs
types. StringBuffer sb = new StringBuffer("Chat");
System.out.println(sb.append("on")); // Chaton
System.out.println(sb.insert(3,"rles")); // Charleston
System.out.println(sb.append(3.4567)); // Charleston3.4567
StringBuffer ont une capacité capacity().
Cela permet de ne pas allouer de mémoire suplémentaire tant
que la longueur length()
de la chaîne ne dépasse pas cette capacité. Sinon, il y a
allocation d'espace suplémentaire.StringBuffer sb = new StringBuffer("Salut!");
System.out.println(sb.length() + " " + sb.capacity()); // 6 22
sb.append(" Comment ça va ?");
System.out.println(sb.length() + " " + sb.capacity()); // 23 46
StringBuilder, plus
performante, est recommandée à la place de StringBuffer.
On va donner des exemple pour la classe des entiers Integer.
Les autres cas sont analogues.
byte on a la classe Byte,
pour int on a Integer, pour
char on a Character, pour float
on a la classe Float, etc. (truc:
première lettre majuscule).byte byteValue() int intValue() float floatValue() double doubleValue() etc...qui retournent le type primitif approprié correspondant à l'objet Wrapper auquel
elles s'appliquent.Integer I = new Integer (2);
Integer J = new Integer ("23");
System.out.println(Integer.MAX_VALUE) ; // 2147483647
System.out.println(Integer.MIN_VALUE) ; // -2147483648 System.out.println(Integer.SIZE) ; // 32
System.out.println(Integer.TYPE) ; // int
Integer I = new Integer (34); // Integer à partir de 34
I = Integer.valueOf(34); // idem mais sans new
int i = I.intValue(); // retrouve le 34 int
String vers Integer et
intInteger I;
I = new Integer ("123"); // Par constructeur
I = Integer.valueOf("123"); // ou comme ceci
int i;
i = Integer.parseInt("456"); // de String vers int
Integer et
int vers StringInteger I = 345;
String s = I.toString(); // s devient "345"
int i = 34;
s = String.valueOf(i); // s devient "34"
I = 3; // Autoboxing
i = I; // Unboxing
Character est intéressante
dans le sens où elle offre les méthodes sur les
caractères: isSpace(),
isUpperCase(),
isLetter(),
isDigit()
, hashCode()
etc.Character.isLetter('!') // false
Character.isLetter('ج') // true
Character.isDigit('5') // true
Character c = 'e';
c.hashCode() // vaut 101
Character.toUpperCase('e') // E
Character.DIRECTIONALITY_LEFT_TO_RIGHT)
.Interger, Short,
Double, Char etc. sont immutables
en Java. Integer i = 2;
i = i + 1; // crée une nouvelle référence vers le
// résultat 3 dans ce cas
class TestParamInteger {
public static void main(String[] args) {
Integer i = new Integer(20); // 20 est objet immutable!
System.out.println(i);
change(i); // référence i copiée dans n
System.out.println(i);
}
private static void change(Integer n) {
n = n + 1; // NOUVEL objet résultat de n+1 est créé,
// son adresse affectée à n (la copie)!
}
}
x
+ y / Math.sqrt(2)Character.isUpperCase(c)int nombre = 5;nombre = 5 est de type entier,
car 5 (partie gauche de =) est évalué à entier.;)
++ ou --delta = b*b - 4*a*c;i++;System.out.println (i);Integer intObj = new Integer(4);double x = 11.234;
{} .if (a > b) {
b++;
} else {
a--;
}
{
int i;
// ... i visible dans ce bloc
}
| Type d'instruction | Mots clés |
|---|---|
| Boucle | while, do-while
, for |
| Choix d'exécution | if-else, switch-case |
| Gestion d'Exception | try-catch-finally, throw |
| Branchement | break, continue, label:,
return |
if (moyenne >= 16){
System.out.println ("Admis(e) avec félicitations");
}
System.out.println ("Admis(e)");
moyenne = 16.5;
if (moyenne >= 17){
mention = "TB";
} else if (moyenne >= 15) {
mention = "B";
} else if (moyenne >= 13) {
mention = "AB";
} else {
mention = "P";
}
System.out.println ("Admis(e) avec mention: " + mention);
max = (a > b ? a : b); // si (a > b) alors a sinon b
switch (note) {
case 20 : case 19 : case 18 : case 17 :
System.out.println ("Mention Très Bien");
break;
case 16 : case 15 :
System.out.println ("Mention Bien");
break;
case 14 : case 13 :
System.out.println ("Mention Assez Bien");
break;
case 12 : default :
System.out.println (" Mention Passable\n");
break;
}
switch fonctionne avec un paramètre de
type primitif: byte, short, char
et int.enum Taille { S, M, L, XL, XXL };
...
public static void f(Taille t) {
switch (t) {
case S:
System.out.println("Small = 1 ou 2");
break;
case M:
System.out.println("Medium = 3");
break;
case L:
System.out.println("Large = 4");
break;
case XL: case XXL:
System.out.println("eXtra Large = 5 ou 6");
break;
}
}
public class WhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " +
"encounter the letter 'g', not included";
StringBuffer copyToMe = new StringBuffer();
int i = 0;
char c = copyFromMe.charAt(i);
while (c != 'g') {
copyToMe.append(c);
c = copyFromMe.charAt(++i);
}
System.out.println(copyToMe);
}
}
Copy this strin"public class DoWhileDemo {
public static void main(String[] args) {
String copyFromMe = "Copy this string until you " +
"encounter the letter 'g', included.";
StringBuffer copyToMe = new StringBuffer();
int i = 0;
char c;
do {
c = copyFromMe.charAt(i++);
copyToMe.append(c);
} while (c != 'g');
System.out.println(copyToMe);
}
}
Copy this string" int[] t = { 32, 87, 3, 589, 12, 1076, 8, 622, 127 };
for (int i = 0; i < t.length; i++) {
System.out.print(t[i] + " ");
}
System.out.println();
32 87 3 589 12 1076 8 622 127"for (int element : t){
System.out.print(element + " ");
}
System.out.println();
class BreakDemo {
public static void main(String[] args) {
int[] arrayOfInts =
{ 32, 87, 3, 589, 12, 1076, 2000, 8, 622, 127 };
int searchfor = 12;
int i;
boolean foundIt = false;
for (i = 0; i < arrayOfInts.length; i++) {
if (arrayOfInts[i] == searchfor) {
foundIt = true;
break;
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at index " + i);
} else {
System.out.println(searchfor + " not in the array");
}
}
}
Found 12 at index 4.
class BreakWithLabelDemo {
public static void main(String[] args) {
int[][] arrayOfInts = {
{ 32, 87, 3, 589 },
{ 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 }
};
int searchfor = 12;
int i;
int j = 0;
boolean foundIt = false;
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length;
j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
if (foundIt) {
System.out.println("Found " + searchfor +
" at " + i + ", " + j);
} else {
System.out.println(searchfor +
" not in the array");
}
}
}
Found 12 at 1, 0.class ContinueDemo {
public static void main(String[] args) {
String searchMe
= "peter piper picked a " +
"peck of pickled peppers";
int max = searchMe.length();
int numPs = 0;
for (int i = 0; i < max; i++) {
// interested only in p's
if (searchMe.charAt(i) != 'p')
continue;
// process p's
numPs++;
}
System.out.println("Found " +
numPs + " p's in the string.");
}
}
Found 9 p's in the string.continue marche aussi avec une
étiquette (label)
pour reprendre l'exécution d'une boucle plus externe. (Exemple).retrun;return ++count;
HelloWorld.java
contenant la classe HelloWorld munie de la
méthode main qui imprime "hello, World".public class HelloWorld {
static public void main(String args[]){
System.out.println("Hello World!");
}
}
javac
appliquée au fichier source. (Exemple donné sous langage de
commande UNIX)$ ls
HelloWorld.java
$ javac HelloWorld.java
$ ls
HelloWorld.class
HelloWorld.java
HelloWorld.class
correspondant à la classe HelloWorld.java
appliquée au fichier .class générée.$ java HelloWorld
Hello, World
HelloWorld.class
provient de nom de la classe dans le fichier source.java admet ce nom de classe
comme argument.java exécute la méthode
main de cette classeHelloWorld.class est le
module "objet"
correspondant à la classe HelloWorld..class compilé par javac.
java justement est une réalisation
de la VM sur une plateforme donnée..class peut s'éxecuter sur MacOS,
Linux ou Windows
etc.


.class et des packages
(répertoires) qui les contiennent.
class DataArtist {
static void draw(String s) {
System.out.println("Ceci est une chaîne: "+s);
}
static void draw(int i) {
System.out.println("Ceci est un entier: "+i);
}
static void draw(double f) {
System.out.println("Maintenant un double: "+f);
}
static void draw(int i, double f) {
System.out.format("Une entier %d et un double %f %n",i,f);
}
}
draw s'applique à plusieurs
paramètres, chacun à sa façon. DataArtist.draw ("Picasso"); // 1ère méthode, draw(String)
DataArtist.draw (1); // 2e méthode, draw(Int)
DataArtist.draw (3.1459); // 3e méthode, draw(double)
DataArtist.draw (2, 1.68); // 4e méthode, draw (int, double)
static int draw(int)
est la même signature que static void draw(int).public static void modifObj(int p[]) {
p[0] = p[0] + 200; // Objet référencé par p est modifié
}
public static void modifVal(int x) {
x = x + 200; // paramètre x modifié
}
int x = 2;
modifVal (x);
// ici, x vaut toujours = 2
int [] t = {2, 3};
modifObj (t);
// t[0] a changé en 202
public static void modifObj(int p[]) {
int r[]={200,300};
p = r; // p[0] = 200,
}
p ne désigne plus le tableau t de l'appel qui
reste donc inchangé
int [] t = {2, 3};
modifObj (t);
// t[0] vaut toujours = 2
Remarque: En Java les paramètres sont réellement passés par valeur. Dans la cas des objets, c'est la valeur de la référence à l'objet qui est passée en paramètre.
try {
int n = fact(5);
}
catch (ExceptionFactNegatif e) {
System.out.println("Valeur negative pour factorielle");
}
static public int fact(int x) throws ExceptionFactNegatif {
if( x < 0 )
throw new ExceptionFactNegatif();
else
// calcul factorielle f ...
return f;
}
ExceptionFactNegatif pour créer
des objets porteurs de l'exceptionclass ExceptionFactNegatif extends Throwable {};
try.

Ancien style. Jusqu'à Java 6.

java.lang)java.langObject,
qui est la racine de la hiérarchie des classes, et la classe Class,
dont les instances représentent les classes à l'exécution.Boolean, Character, Integer,
Long, Float et Double.Math, qui fournit les
fonctions mathématiques usuelles.String,
la classe System, Throwable, Thread
etc.Cloneable, Runnable
entre autres.import java.lang.Math import java.lang.*import.
java.utiljava.utilList,
Vector, Stack, HashMap,
HashTable, etc.Calendar, Date, Scanner...java.io
java.ioConsole, Input(Output)Stream, FileInput(Output)Stream,
PrintStream, Reader, Writer...EOFException, IOException ...
