I. Remarques▲
- L'examen réel vous dira le nombre exact de réponses valides. Nous ne le faisons pas, car nous voulions que ce quizz soit un peu plus dur que l'examen réel.
- L'examen réel contient des questions « Tirer-Lâcher ». Nous avons formaté la question #9 pour refléter la façon dont les questions de tirer-lâcher sont posées (mais sans avoir la partie interactive vu que c'est sur papier).
- Ces questions sont une bonne représentation du ton, du style, de la difficulté et du contenu de l'examen réel. Si vous avez déjà passé des versions précédentes de l'examen SCJP, vous allez noter une grande différence - on est passé de questions « basées sur la connaissance », qui posaient une question spécifique à propos d'une règle Java, à des questions « basées sur la performance » où vous devez analyser du code et ensuite appliquer votre connaissance Java pour trouver ce qui se passe. Vous trouverez moins de questions concernant le langage (ou la mémorisation d'API), mais plus de questions pour voir si vous savez comment le langage fonctionne vraiment. Aussi les questions que nous vous proposons ici sont axées sur les nouvelles fonctionnalités de Tiger/Java 5.
- Vous avez raison - il y a des bouts de code dans l'examen pour lesquels vous seriez renvoyé si vous écriviez du code comme cela à votre travail. Les développeurs de l'examen ont essayé de réduire cela autant que possible, car nous désirons que vous soyez préparé pour des réelles choses.
- Le livre inclut les explications pour les réponses - nous ne l'avons pas fait ici parce que nous n'avions pas encore fini cette partie. Ces questions ont été bêta-testées, nous sommes donc confiants quant à l'exactitude des réponses… mais vous savez comment vont les choses. Si vous ne comprenez pas une réponse, passez par le forum concernant les certifications SCJP, où les questions ont été débattues. N'hésitez pas à poser vos questions. Mais nous (Kathy et Bert) ne serons pas capables de répondre personnellement à vos questions. Raison pour laquelle JavaRanch est la meilleure place pour poser vos questions. [NDT http://java.developpez.com, la meilleure place pour les francophones.]
- Nous travaillons sur la mise à jour du livre aussi vite que nous le pouvons ! Il devrait être disponible sur Amazon fin septembre ou début octobre. [NDT Ce sera plutôt pour janvier 2006]. Désolé pour le retard !!! Bonne chance pour vos études.
- Ces questions sont protégées par copyrights 2005 Kathy Sierra & Bert Bates. Notre publieur demande que nous précisons cela. Vous pouvez partager le lien vers cette page, vous pouvez imprimer cette page et la diffuser aux autres, mais veuillez ne pas les reproduire dans un autre livre ou examen factice (mock exam).
II. Questions Factices▲
II-A. Question 1▲
Étant donné :
enum
Cheval {
PONEY
(
10
),
// insérer le code ici
CHEVAL
(
15
);
Cheval
(
int
mains) {
this
.hauteur =
mains;
this
.longueur =
mains *
100
;
}
int
hauteur;
int
longueur;
int
getLongueur
(
) {
return
longueur; }
void
setLongueur
(
int
w) {
longueur =
w; }
}
class
Stable {
public
static
void
main
(
String [] salut) {
Cheval h =
Cheval.ISLANDAIS;
System.out.println
(
h.getLongueur (
) +
" "
+
h.hauteur);
}
}
Qu'est ce qui, inséré à la place de '// insérer le code ici', produit le résultat ? :
800 13
(Choisissez toutes les possibilités)
- ISLANDAIS(13) { longueur = 800; },
- ISLANDAIS(13) { setLonguer(800); },
- ISLANDAIS(13) { this.longueur = 800; },
- ISLANDAIS(13) { public int getLongueur() { return 800; } },
- Aucun du code ci-dessus ne va produire le résultat demandé.
- Du fait de la présence d'autres erreurs dans le code, aucun des choix proposés ne permettra la compilation.
II-B. Question 2▲
Étant donné :
1.
class
Aïe {
2.
public
static
void
main
(
String [] args) {
3.
faitQuelqueChose
(
1
);
4.
faitQuelqueChose
(
1
,2
);
5.
}
6.
// insérer le code ici
7.
}
Qu'est ce qui, inséré à la ligne 6, va compiler ? (Choisissez toutes les possibilités.)
- static void faitQuelqueChose(int… doArgs) { }
- static void faitQuelqueChose(int[] doArgs) { }
- static void faitQuelqueChose(int doArgs…) { }
- static void faitQuelqueChose(int… doArgs, int y) { }
- static void faitQuelqueChose(int x, int… doArgs) { }
- Aucun des bouts de code donnés ci-dessus ne permet la compilation.
II-C. Question 3▲
Étant donné :
class
Oiseau {
{
System.out.print
(
"b1 "
); }
public
Oiseau
(
) {
System.out.print
(
"b2 "
); }
}
class
Rapace extends
Oiseau {
static
{
System.out.print
(
"r1 "
); }
public
Rapace
(
) {
System.out.print
(
"r2 "
); }
{
System.out.print
(
"r3 "
); }
static
{
System.out.print
(
"r4 "
); }
}
class
Aigle extends
Rapace {
public
static
void
main
(
String[] args) {
System.out.print
(
"pre "
);
new
Aigle
(
);
System.out.println
(
"aigle "
);
}
}
Quel est le résultat ?
- pre b1 b2 r3 r2 aigle
- pre b2 b1 r2 r3 aigle
- pre b2 b1 r2 r3 aigle r1 r4
- r1 r4 pre b1 b2 r3 r2 aigle
- r1 r4 pre b2 b1 r2 r3 aigle
- pre r1 r4 b1 b2 r3 r2 aigle
- pre r1 r4 b2 b1 r2 r3 aigle
- L'ordre d'affichage ne peut être prédit
- La compilation échoue
II-D. Question 4▲
Quelle exception est typiquement lancée par un développeur d'API ou un développeur d'Application contrairement à ce qui est lancé généralement par la JVM ? (Choisissez toutes les possibilités.)
- ClassCastException
- IllegalStateException
- NumberFormatException
- IllegalArgumentException
- ExceptionInInitializerError
II-E. Question 5▲
Étant donné :
class
Oeufs {
int
doX
(
Long x, Long y) {
return
1
; }
int
doX
(
long
... x) {
return
2
; }
int
doX
(
Integer x, Integer y) {
return
3
; }
int
doX
(
Number n, Number m) {
return
4
; }
public
static
void
main
(
String[] args) {
new
Oeufs
(
).go
(
);
}
void
go
(
) {
short
s =
7
;
System.out.print
(
doX
(
s,s) +
" "
);
System.out.println
(
doX
(
7
,7
));
}
}
Quel est le résultat ?
- 1 1
- 2 1
- 3 1
- 4 1
- 1 3
- 2 3
- 3 3
- 4 3
II-F. Question 6▲
Étant donné :
import
java.io.*;
class
Joueur {
Joueur (
) {
System.out.print
(
"p"
); }
}
class
JoueurDeCartes extends
Joueur implements
Serializable {
JoueurDeCartes (
) {
System.out.print
(
"c"
); }
public
static
void
main
(
String[] args) {
JoueurDeCartes c1 =
new
JoueurDeCartes
(
);
try
{
FileOutputStream fos =
new
FileOutputStream
(
"jeu.txt"
);
ObjectOutputStream os =
new
ObjectOutputStream
(
fos);
os.writeObject
(
c1);
os.close
(
);
FileInputStream fis =
new
FileInputStream
(
"jeu.txt"
);
ObjectInputStream is =
new
ObjectInputStream
(
fis);
JoueurDeCartes c2 =
(
JoueurDeCartes) is.readObject
(
);
is.close
(
);
}
catch
(
Exception x ) {
}
}
}
Quel est le résultat ?
- pc
- pcc
- pcp
- pcpc
- Compilation échoue
- Une exception est jetée à l'exécution
II-G. Question 7▲
Étant donné :
import
java.util.regex.*;
class
Regex2 {
public
static
void
main
(
String[] args) {
Pattern p =
Pattern.compile
(
args[0
]);
Matcher m =
p.matcher
(
args[1
]);
boolean
b =
false
;
while
(
b =
m.find
(
)) {
System.out.print
(
m.start
(
) +
m.group
(
));
}
}
}
Et la ligne de commande :
java Regex2 "\d*" ab34ef
Quel est le résultat ?
- 234
- 334
- 2334
- 0123456
- 01234456
- 12334567
- Compilation échoue
II-H. Question 8▲
Étant donné :
bw est une référence à un objet valide de type BufferedWriter
et le bout de code suivant :
15
BufferedWriter b1 =
new
BufferedWriter
(
new
File
(
"f"
));
16.
BufferedWriter b2 =
new
BufferedWriter
(
new
FileWriter
(
"f1"
));
17.
BufferedWriter b3 =
new
BufferedWriter
(
new
PrintWriter
(
"f2"
));
18.
BufferedWriter b4 =
new
BufferedWriter
(
new
BufferedWriter
(
bw));
Quel est le résultat ?
- Compilation réussie
- Compilation échoue dû à une erreur à la ligne 15.
- Compilation échoue dû à une erreur à la ligne 16.
- Compilation échoue dû à une erreur à la ligne 17.
- Compilation échoue dû à une erreur à la ligne 18.
- Compilation échoue dû à une erreur sur plusieurs lignes.
II-I. Question 9▲
En utilisant les fragments de code ci-dessous, compléter le code suivant pour qu'il compile et qu'il affiche "40 36 30 28". Note, vous pouvez utiliser un fragment autant de fois que nécessaire, ou même pas du tout.
import
java.util.*;
class
Pantalon {
int
taille; Pantalon
(
int
s) {
taille =
s; }
}
public
class
GardeRobe {
List ________ p =
new
ArrayList ________ (
);
class
Comp implements
Comparator ________ {
public
int
________
(
Pantalon one, Pantalon two) {
return
________ -
________;
}
}
public
static
void
main
(
String[] args) {
new
GardeRobe
(
).go
(
);
}
void
go
(
) {
p.add
(
new
Pantalon
(
30
));
p.add
(
new
Pantalon
(
36
));
p.add
(
new
Pantalon
(
28
));
p.add
(
new
Pantalon
(
40
));
Comp c =
new
Comp
(
);
Collections. ________ ________;
for
(
________ x : p)
System.out.print
(
________ +
" "
);
}
}
<
Pantalon>
<
GardeRobe>
<
Comp>
<
Comparator>
Pantalon GardeRobe Comp Comparator
compare compareTo sort order
one.size two.size x.size p.size
c.size (
p, c) (
c, p) sortList
II-J. Question 10▲
Étant donné les trois fichiers source suivants :
1.
package
org;
2.
public
class
Robot {
}
1.
package
org.ex;
2.
public
class
AnimalDomestique {
}
1.
package
org.ex.pourquoi;
2.
public
class
Chien {
int
foo =
5
; }
Et ce fichier, incomplet :
// insérer le code ici
public
class
MaClasse {
Robot r;
AnimalDomestique p;
Chien d;
void
go
(
) {
int
x =
d.foo;
}
}
Quelle(s) instruction(s) doit(vent) être rajoutée(s) à MaClasse pour que cela compile ? (Choisissez toutes les possibilités.)
- package org;
- import org.*;
- package org.*;
- package org.ex;
- import org.ex.*;
- import org.ex.pourquoi;
- package org.ex.pourquoi;
- package org.ex.pourquoi.Chien;
II-K. Question 11▲
Étant donné :
1.
import
java.util.*;
2.
public
class
Fruits {
3.
public
static
void
main
(
String [] args) {
4.
Set<
Citron>
c1 =
new
TreeSet<
Citron>(
);
5.
Set<
Orange>
o1 =
new
TreeSet<
Orange>(
);
6.
mordre
(
c1);
7.
mordre
(
o1);
8.
}
9.
// insérer du code ici
10.
}
11.
class
Citron {
}
12.
class
Orange extends
Citron {
}
Qu'est-ce qui, inséré en ligne 9, permettra la compilation ? (Choisissez toutes les possibilités.)
- public static void mordre(Set<?> s) { }
- public static void mordre(Set<Object> s) { }
- public static void mordre(Set<Citron> s) { }
- public static void mordre(Set<? super Citron> s) { }
- public static void mordre(Set<? super Orange> s) { }
- public static void mordre(Set<? extends Citron> s) { }
- Du fait de la présence d'autres erreurs dans le code, aucune de ces lignes ne permettra la compilation.
III. Réponses▲
III-A. Réponse 1▲
D est correct. (objectif 1.1)
III-B. Réponse 2▲
A et E utilise une syntaxe var-args valide. (objectif 1.1)
III-C. Réponse 3▲
D est correct. Note: vous ne verrez probablement jamais autant de choix dans le vrai examen! (objectif 1.3)
III-D. Réponse 4▲
B, C et D sont corrects. (objectif 2.6)
III-E. Réponse 5▲
H est correct. (objectif 3.1)
III-F. Réponse 6▲
C est correct. (objectif 3.3)
III-G. Réponse 7▲
E est correct. (objectif 3.5)
III-H. Réponse 8▲
B est correct. (objectif 3.2)
III-I. Réponse 9▲
Le code correct est :
import
java.util.*;
class
Pants {
int
size; Pants
(
int
s) {
size =
s; }
}
public
class
FoldPants {
List<
Pants>
p =
new
ArrayList<
Pants>(
);
class
Comp implements
Comparator <
Pants>
{
public
int
compare
(
Pants one, Pants two) {
return
two.size -
one.size;
}
}
public
static
void
main
(
String[] args) {
new
FoldPants
(
).go
(
);
}
void
go
(
) {
p.add
(
new
Pants
(
30
));
p.add
(
new
Pants
(
36
));
p.add
(
new
Pants
(
28
));
p.add
(
new
Pants
(
40
));
Comp c =
new
Comp
(
);
Collections.sort
(
p, c);
for
(
Pants x : p)
System.out.print
(
x.size +
" "
);
}
}
(objectif 6.5)
III-J. Réponse 10▲
B, E, et G sont requis. (objectif 7.5)
III-K. Réponse 11▲
A, E, et F sont des utilisations correctes des génériques, avec des (bounded) jokers. (objectif 6.4)