Java Quiz #22

Au programme cette semaine, un peu de synchronisation...

Imaginez que dans une classe, vous avez besoin de faire des initialisations, mais que vous ne voulez faire ces initialisations qu'au premier appel.

Vous écrivez alors ceci :

  1. private static Boolean inited = Boolean.FALSE;
  2. ...
  3. public void doJob() {
  4. // On commence par initialiser ce qui doit l'être
  5. synchronized (inited) {
  6. if (!inited) {
  7. init();
  8. inited = Boolean.TRUE;
  9. }
  10. }
  11.  
  12. // On fait le boulot
  13. ...
  14. }
  15. ...

Or ce code peut poser problème. Pourquoi ?

Lire la suite...

Java Quiz #21

Est-il possible que le programme suivant provoque l'affichage ci-dessous ?

  1. public class TestEq {
  2. public static void main(String... args) {
  3. // Déclaration de i1, i2 et i3
  4.  
  5. i1 = 127; i2 = 127; i3 = 127;
  6. System.out.println(i1 == i2);
  7. System.out.println(i2 == i3);
  8.  
  9. i1 = 128; i2 = 128; i3 = 128;
  10. System.out.println(i1 == i2);
  11. System.out.println(i2 == i3);
  12. }
  13. }
true
true
true
false

Si oui, quelles sont les déclarations possibles de i1, i2 et i3 pour cela ?

Lire la suite...

Java Quiz #20

A votre avis, le code suivant : null ou pas null ?

  1. public class NullOuPasNull {
  2. static String message = "Pas null";
  3.  
  4. public NullOuPasNull getNull() {
  5. return null;
  6. }
  7.  
  8. public static void main(String[] args) throws Exception {
  9. NullOuPasNull o = new NullOuPasNull();
  10.  
  11. System.out.println(o.getNull().message);
  12. }
  13. }
Lire la suite...

Java Quiz #19

Que diriez-vous du code suivant ?

public class TiensUneURL {
    public static void main(String... args) {
        System.out.println("Une petite curiosité...");
        http://olivier.croisier.free.fr/blog/index.php?2008/10/19/93-java-quiz-19   // L'URL de ce billet
        System.out.println("Qu'en dit le compilateur ?");
    }
}

(essayez de trouver la réponse sans coller le code dans un IDE...)

Lire la suite...

Java Quiz #18

Que fait ce code ? (et pourquoi ?)

  1. class Koassah{public static void main(String[] args){\u0066or(int
  2. \u0020$:"m¾\"®Æ¤¾\u01b0¤´È:\"À¾\"ª´Ê\"\u0138iÀ¼¼¬¾Ê\"`\u0158".to\u0043h\u0061rArray()
  3. )System./*goto/*$/%\u0126//^\u002A\u002Fout.print((char)(($>>+
  4. (~'"'&'#'))+('<'>>('\\'/'.')/\u002Array.const(~1)\*\u002F)));}}
  5.  

Voilà un quiz où il ne suffira pas de copier/coller le code dans Eclipse pour donner la réponse... ;-)

Lire la suite...

Java Quiz #17

Comment écrire un programme Java sans méthode main, qui affiche (sans aucune erreur) «Hello world!» lorsqu'on l'exécute ?

Lire la suite...

Java Quiz #16

Qu'affiche ce code ?

  1. class Super {
  2. static { System.out.print("**Super** "); }
  3. }
  4.  
  5. class Un {
  6. static { System.out.print("**Un** "); }
  7. }
  8.  
  9. class Deux extends Super {
  10. static { System.out.print("**Deux** "); }
  11.  
  12. static final String DEUX = "dEuX";
  13. }
  14.  
  15. class TestClasse {
  16. public static void main(String[] args) throws Exception {
  17. Un o = null;
  18. Class<Deux> c = Deux.class;
  19.  
  20. System.out.println(Deux.DEUX);
  21. System.out.println(((Object) o == (Object) c));
  22. System.out.println(c.equals(o));
  23. System.out.println(c); // Appelle toString() sur c.
  24. System.out.println(c.newInstance());
  25. }
  26. }
Lire la suite...

Java Quiz #15

Que fait ce code ?

Edit : Le code a été modifié pour corriger certaines typos qui empêchaient de démontrer le point technique mis en avant dans ce quiz.

  1. public final class AddUtils {
  2.  
  3. public static Number add(Collection<Integer> ints) {
  4. int sum = 0;
  5. for (int i : ints) {
  6. sum += i;
  7. }
  8. return sum;
  9. }
  10.  
  11. public static Number add(Collection<Long> longs) {
  12. long sum = 0;
  13. for (long l : longs) {
  14. sum += l;
  15. }
  16. return sum;
  17. }
  18.  
  19. public static void main(String... args) {
  20. List<Integer> ints = Arrays.asList(1, 2, 3, 4);
  21. Number intSum = AddUtils.add(ints);
  22.  
  23. List<Long> longs = Arrays.asList(1L, 2L, 3L, 4L);
  24. Number longSum = AddUtils.add(longs);
  25.  
  26. System.out.println(intSum.equals(longSum));
  27. }
  28. }
Lire la suite...

Java Quiz #14

(Presque) tout le monde connait le pattern suivant :

  1. public class MaClasse implements java.io.Serializable {
  2. private static final MaClasse INSTANCE = new MaClasse();
  3.  
  4. private MaClasse() {
  5. // ...
  6. }
  7.  
  8. public static MaClasse getInstance() {
  9. return INSTANCE;
  10. }
  11.  
  12. private Object readResolve() {
  13. return INSTANCE;
  14. }
  15.  
  16. public void bosseUnPeu() {
  17. // ...
  18. }
  19. }

Avec les dernières versions de Java, y a-t-il une autre manière, beaucoup plus simple et concise, d'implémenter ce pattern de conception ?

Lire la suite...

Java Quiz #13

Une classe Java peut-elle être déchargée de la mémoire ?

Lire la suite...

- page 4 de 6 -