IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Certificat SCJP : Quatre questions avec réponses incompréhensibles !


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 85
    Par défaut Certificat SCJP : Quatre questions avec réponses incompréhensibles !
    Bonjour,

    Je suis en préparation du SCJP.

    Voici quatre questions dont je ne comprends pas les réponses données par le livre.

    Quelqu'un peut-il me corriger ou me dire si j'ai choisi la bonne réponse ?

    Question.1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    package sun.scjp;
    public enum Color { RED, GREEN, BLUE }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    package sun.beta;
    // insert code here
    public class Beta {
    Color g = GREEN;
    public static void main( String[] argv)
    { System.out.println( GREEN); }
    }
    The class Beta and the enum Color are in different packages.
    Which two code fragments, inserted individually at line 2 of the Beta declaration, will allow this code to compile? (Choose two.)
    A. import sun.scjp.Color.*;
    B. import static sun.scjp.Color.*;
    C. import sun.scjp.Color; import static sun.scjp.Color.*;
    D. import sun.scjp.*; import static sun.scjp.Color.*;
    E. import sun.scjp.Color; import static sun.scjp.Color.GREEN;
    Answer: CE
    Pour quoi pas D ?

    ___________________________________________________

    Question.2
    Given:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public String makinStrings() {
    String s = “Fred”;
    s = s + “47”;
    s = s.substring(2, 5);
    s = s.toUpperCase();
    return s.toString();
    }
    How many String objects will be created when this method is invoked?
    A. 1
    B. 2
    C. 3
    D. 4
    E. 5
    F. 6
    Answer: C
    Pour moi la réponse est D, car 4 objets String sont créés à la ligne 2, 3, 4 et 5 ?

    ___________________________________________________

    Question.3
    Given classes defined in two different files:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    package packageA;
    public class Message {
    String getText() { return “text”; }
    }
    and:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    package packageB;
    public class XMLMessage extends packageA.Message {
    String getText() { return “<msg>text</msg>”; }
    public static void main(String[] args) {
    System.out.println(new XMLMessage().getText());
    }
    }
    What is the result of executing XMLMessage.main?
    A. text
    B. <msg>text</msg>
    C. An exception is thrown at runtime.
    D. Compilation fails because of an error in line 2 of XMLMessage.
    E. Compilation fails because of an error in line 3 of XMLMessage.
    Answer: E
    Moi je dirais plutôt la réponse B !?

    ___________________________________________________

    Question.4
    Given the command line java Pass2 and:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Pass2 {
    public void main(String [] args) {
    int x=6;
    Pass2 p = new Pass2();
    p.doStuff(x);
    System.out.print(” main x = “+ x);
    }
     
    void doStuff(int x) {
     System.out.print(” doStuffx = “+ x++);
     }
     }
    What is the result?
    A. Compilation fails.
    B. An exception is thrown at runtime.
    C. doStuffx = 6 main x = 6
    D. doStuffx = 6 main x = 7
    E. doStuffx = 7 main x = 6
    F. doStuffx = 7 main x = 7
    Answer: B
    Moi j'aurai dit C !?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    1> Je me serais aussi fait avoir aussi. On dirait que les enums ne sont pas importé avec un ".*".

    2> Je ne suis pas sur mais je crois que la Java optmise le "substring" et ne crée pas de nouvel objet, il se contente de modifier les champs "offset" et "size" interne de l'objet.

    3> La visibilité de "getText" n'a pas été déclarée il est donc dit "package private". Il n'est donc pas hérité et donc pas surchargeable par les classes d'un autre package.
    Heu non je dis une betise, getText n'étant pas visible il est redéclaré(mais pas surchargé).
    B me parait correct.

    4> le main n'est pas "static"

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 85
    Par défaut
    Pour la Question.2, voici une partie du cours de préparation :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String s1 = "spring ";
    String s2 = s1 + "summer ";
    s1.concat("fall ");
    s2.concat(s1);
    s1 += "winter ";
    System.out.println(s1 + " " + s2);
    What is the output? For extra credit, how many String objects and how many reference variables were created prior to the println statement?

    Answer: The result of this code fragment is spring winter spring summer.
    There are two reference variables, s1 and s2. There were a total of eight String objects created as follows: "spring", "summer " (lost), "spring summer", "fall" (lost), "spring fall" (lost), "spring summer spring" (lost), "winter" (lost), "spring winter" (at this point "spring" is lost). Only two of the eight String objects are not lost in this process.

  4. #4
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par Uther Voir le message
    Heu non je dis une betise, getText n'étant pas visible il est redéclaré(mais pas surchargé).
    B me parait correct.
    J'ai testé et à part un warning qui precise que la methode n'etend pas getText original (ce qui est normal vu qu'il n'est pas visible), j'obtiens bien le comportement B.

    Citation Envoyé par need2learn Voir le message
    Pour la Question.2, voici une partie du cours de préparation :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String s1 = "spring ";
    String s2 = s1 + "summer ";
    s1.concat("fall ");
    s2.concat(s1);
    s1 += "winter ";
    System.out.println(s1 + " " + s2);
    Ca ne correspond pas au probleme puisque c'est le cas particulier de substring qui nous interesse. Et comme les String sont immutable, elles sont partagées donc faire substring ne crée pas une nouvelle String.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 586
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Pour les questions 1 et 3, je ne sais pas. C'est peut-être une question de subtilité ou de version du langage. Il faudrait tester avec différents compilateurs. De toute façon on est aux cas aux limites. Des questions stupides.

    Pour la question 2, vous vous plantez les gens.
    Oui, substring() va créer un nouvel objet String, évidemment ! Il n'est pas obligé de le faire si c'est un substring qui produit la même chaîne que celle qui est appelée. Et on peut penser qu'il n'est pas obligé de le faire non plus pour produire la chaîne vide. Mais dans les autres cas, il n'a pas le choix ! Oui, le tableau de caractère, est probablement partagé entre les objets Strings. Mais les objets eux-mêmes sont distincts.

    Le piège, c'est comment la question est tournée. Combien de String seront créées lors de l'invocation de la méthode ?

    La première ligne, String s = "Fred"; assigne une String littérale. Donc une constante. Elle a donc été créée bien avant l'appel de la fonction. Au plus tard elle a été créée au chargement de la classe. Mais ça peut aussi dater de bien avant, si la constante est utilisée ailleurs, plus tôt, dans le programme.

    Donc,
    - la première ligne ne crée pas de String.
    - la deuxième fait une concaténation, de non-constantes. Dans ces cas-là il y a création de String.
    - la troisième fait un substring qui est bien obligé de créer un nouvel objet pour avoir les extrémités demandées.
    - la quatrième fait un toUpperString sur une chaîne qui n'est pas déjà uppercase, donc bien obligé de créer encore une String
    - la cinquième appelle toString() sur l'objet qui est déjà une String. C'est connu, dans ce cas la String se renvoie elle-même, elle n'en crée pas une autre.

    => 3 String créées.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 748
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 748
    Par défaut
    Oui en effet en relisant, je me suis rendu compte de l'erreur. Je n'avais pas vu la subtilité du "when this method is invoked".

    Le substring() crée forcément un nouveau String sinon, ça casserait l'immuabilité de la classe. C'est juste qu'il n'alloue pas un nouveau char[] interne car il réutilise celui de la String d'origine.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2016, 10h13
  2. Réponses: 2
    Dernier message: 23/04/2015, 20h56
  3. Question : Envoi de données avec réponse en synchrone
    Par LaurentC33 dans le forum Réseau
    Réponses: 0
    Dernier message: 27/02/2015, 18h45
  4. [2.x] Formulaire contenant des questions avec réponses prédéfinis
    Par SempreD dans le forum Symfony
    Réponses: 0
    Dernier message: 25/05/2012, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo