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*" ab34efQuel 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) sortListII-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)




