Correction - QCM POO / Java
Questions et réponses (avec rappel de chaque question)
Source : document PDF fourni (QCM [Link]). Généré le 2026-01-31.
Partie 1 - QCM
Q1. En JAVA, il est possible d'écrire des méthodes en dehors de toute classe. On écrit les
méthodes dans un fichier .java. Elles sont toutes des méthodes statiques.
1) OUI
2) NON
Réponse correcte : 2) NON
Q2. En JAVA, une classe contient la déclaration des attributs et la déclaration des méthodes.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q3. Dans un langage orienté objet, un objet appartient toujours à une classe.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q4. Dans un langage orienté objet, un principe fort est que les données sont encapsulées dans
une structure d'accès appelée une classe.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q5. En programmation objet, la relation d'agrégation entre une classe A et B est utilisée pour
décrire qu'un objet de type A se décompose en un sous-objet de type B. La vie du sous-objet B
dépend de la vie de l'objet A auquel il appartient.
1) OUI
2) NON
Réponse correcte : 2) NON
Q6. Soit le fichier suivant C:\CodeJava\exercices\fr\cnam\util\[Link]. Le fichier
[Link] contient en 1ère ligne : package [Link]; Le répertoire C:\bin est
vide. Dans C: on réalise la commande suivante : javac -d C:\bin C:\CodeJava\exercices\fr\
cnam\util\[Link] On obtient dans le répertoire bin la création suivante :
1) fr/cnam/util/[Link]
2) exercices/fr/cnam/util/[Link]
Réponse correcte : 2) exercices/fr/cnam/util/[Link]
Q7. La commande javac prend en entrée un ou plusieurs fichiers .java. Elle les compile et crée
un fichier exécutable binaire qui ensuite pourra être lancé sur le système d'exploitation.
1) OUI
2) NON
Réponse correcte : 2) NON
Q8. Pour exécuter un programme JAVA, il faut créer une classe de nom Main dans laquelle on
écrit le code du programme principal.
1) OUI
2) NON
Réponse correcte : 2) NON
Q9. Pour exécuter un programme JAVA, il faut créer une méthode main dans n'importe quelle
classe et dont la signature peut être :
1) public void main()
2) public static void main()
3) public static void main(String[] args)
Réponse correcte : 3) public static void main(String[] args)
Q10. Le fichier [Link] contient 2 classes : une classe publique C1 et une classe privée C2. La
commande javac [Link]
1) crée qu'un fichier : [Link]
2) compile la classe C1 et exécute la méthode main de la classe C1
3) crée deux fichiers : [Link] et [Link]
Réponse correcte : 3) crée deux fichiers : [Link] et [Link]
Q11. Soit le code suivant : public class Exemple { public static void main(String args[]) { String
str = args[0]; [Link](str); }} Commande d'exécution : java Exemple toto
1) Ce programme ne se compile pas car il y a une erreur de syntaxe
2) L'exécution échoue car il y a une erreur d'exécution
3) L'exécution de ce programme affiche à l'écran la chaine de caractère passée en
argument: toto
Réponse correcte : 3) L'exécution de ce programme affiche à l'écran la chaine de caractère
passée en argument: toto
Q12. Une classe C appartient à un package [Link] si le fichier [Link] se trouve dans
le répertoire fr/cnam/exemple et si en en-tête du fichier [Link] il y a la ligne : package
[Link];
1) OUI
2) NON
Réponse correcte : 1) OUI
Q13. Soit une classe contenant les méthodes mstat1 et m2. mstat1 est une méthode statique
et m2 n'est pas une méthode statique :
1) la méthode mstat1( statique) peut utiliser les attributs non statiques de la classe
2) la méthode m2 (non statique) peut utiliser les attributs statiques de la classe
3) la méthode mstat1 (statique) peut utiliser les attributs statiques de la classe
Réponse correcte : 2) la méthode m2 (non statique) peut utiliser les attributs statiques de la
classe ; 3) la méthode mstat1 (statique) peut utiliser les attributs statiques de la classe
Q14. Soit le code JAVA suivant : public class C { private int attribut; public C(){attribut=10;}
public static void main(String[] args) { C objet = new C(); [Link] =
[Link](args[0]); } } La partie de code en gras est correct
1) OUI
2) NON
Réponse correcte : 2) NON
Q15. En JAVA, les méthodes déclarées en dehors d'une classe sont appelées des méthodes
statiques.
1) OUI
2) NON
Réponse correcte : 2) NON
Q16. Le paramètre -classpath ou la variable d'environnement CLASSPATH est utilisée pour
désigner une liste de plusieurs chemin (ou path) d'accès à des répertoires. Chacun de ces
répertoires contient les fichiers .class ou les packages utilisés dans la compilation ou dans
l'exécution d'un programme JAVA.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q17. Un attribut privé (private) d'une classe A peut être directement utilisé par une méthode
d'une autre classe B qui appartient au même package que A.
1) OUI
2) NON
Réponse correcte : 2) NON
Q18. Un attribut protégé (protected) d'une classe A peut être directement utilisé par une
méthode d'une autre classe B qui appartient au même package que A.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q19. Soit la classe C1 qui contient un attribut privé. Une méthode de la classe C2 prend en
paramètre une instance de la classe C1 et veut changer la valeur de cet attribut. Cela est
possible que s'il existe un setteur sur cet attribut dans la classe C1.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q20. Dans la programmation objet, en JAVA, le rôle du constructeur d'une classe est de :
1) initialiser les attributs de la classe
2) déclarer de nouveaux attributs
3) construire la classe (ou .class) qui permet à un autre programme de créer les objets de la
classe
Réponse correcte : 1) initialiser les attributs de la classe
Q21. Soit la classe suivante : public class C1{ private int[] tab; public C1(int[] tt){ tab = tt; } }
L'instruction suivante : C1 c1 = new C1(); est valide, et la valeur de tab est la valeur par défaut
de Java : null
1) OUI
2) NON
Réponse correcte : 2) NON
Q22. Dans le cadre du développement d'un programme Java, on définit une classe contenant
aucune méthode et contenant que des attributs statics et publics.
1) Cela n'est pas possible.
2) Cela est possible mais inutile
3) Cela permet de déclarer des variables globales à tout le développement du programme
Java
Réponse correcte : 3) Cela permet de déclarer des variables globales à tout le développement
du programme Java
Q23. Soit le code JAVA suivant : public class Exemple { ????? int var_x; } public class C { public
void traitement(Exemple ex) { ex.var_x = 100; } Pour que ce code soit correct, il faut remplacer
????? par :
1) private
2) public
Réponse correcte : 2) public
Q24. Dans le constructeur d'une classe, il est possible d'appeler une méthode (statique ou non
statique) de la même classe.
1) OUI
2) NON
Réponse correcte : 1) OUI
Q25. Soit le code JAVA suivant : public class C { private int attribut; public C(int param)
{attribut=param;} public int getAttribut(){return attribut;} public static void main(String[] args)
{ C objet = new C(); [Link]([Link]()); } } Ce code est correct
1) OUI
2) NON
Réponse correcte : 2) NON
Q26. En JAVA, une classe peut contenir plusieurs constructeurs
1) OUI
2) NON
Réponse correcte : 1) OUI
Q27. Soit le code JAVA suivant : public class Livre { // Le titre du livre private String titre; // Le
constructeur public Livre(String titre){ setTitre(titre);} // Setteur public void setTitre(String
titre){ [Link]=titre; } } L'utilisation (en gras) de setTitre dans le constructeur :
1) déclenche une erreur de compilation
2) déclenche une erreur d'exécution
3) est correct
Réponse correcte : 3) est correct
Q28. En JAVA, le type prédéfini primitif int est un type référence (pointeur).
1) OUI
2) NON
Réponse correcte : 2) NON
Q29. Soit le code suivant : Livre l = new Livre(); [Link] = "Les cavernes d'acier"; ArrayList<Livre>
livres = new ArrayList<Livre>(); [Link](l); [Link]="Face aux feux du soleil";
[Link]([Link](0).nom); Ce code affiche :
1) Face aux feux du soleil
2) Les cavernes d'acier
Réponse correcte : 1) Face aux feux du soleil
Q30. En Java, il est possible de modifier la référence d'un objet passé en paramètre d'une
méthode.
1) OUI
2) NON
Réponse correcte : 2) NON
Q31. Soit le code JAVA suivant: public class C { public static void initTab(int nb, int[] tab){ tab =
new int[nb]; } } Et par ailleurs : int[] tableau; [Link](10,tableau);
[Link]([Link]()); Ce code :
1) déclenche une erreur d'exécution (nullPointerException)
2) affiche la valeur : 0
3) affiche la valeur: 10
Réponse correcte : 1) déclenche une erreur d'exécution (nullPointerException)
Q32. Le code suivant permet d'augmenter la taille du tableau t1 : int[] t1 = new int[10]; t1 =
{1,2,3,4,5,6,7,8,9,10}; t1 = augmenterTailleTab(t1,100); Avec : public static int[]
augmenterTaille(int[] t,int newTaille) { int[] tmp = new int[newTaille]; for(int i=0;i<[Link];i+
+) tmp[i]=t[i]; return tmp; }
1) OUI
2) NON
Réponse correcte : 1) OUI
Q33. L'avantage d'utiliser un ArrayList à la place d'un tableau [] est :
1) Le ArrayList permet de stocker des objets alors que le tableau [] ne peut stocker que des
types primitifs (int, double, ….)
2) Le ArrayList permet de stocker un nombre indéterminé d'objet
Réponse correcte : 2) Le ArrayList permet de stocker un nombre indéterminé d'objet
Q34. Soit le code JAVA suivant : String[] tab = new String[4]; tab[0]="UN"; tab[1]="DEUX";
for(String s : tab){[Link](s);}
1) Ce code affiche : UN DEUX null null
2) Ce code affiche : UN DEUX
Réponse correcte : 1) Ce code affiche : UN DEUX null null
Q35. Dans la classe String la méthode static void replace(String old, String new, String target )
permet de remplacer dans la chaine target toutes les occurrences de la chaîne old par la
chaîne new. Exemple: String cible = "un deux un quatre un"; [Link]("un","trois",cible);
[Link](cible); // affiche: trois deux trois quatre trois"
1) OUI
2) NON 2. Questions libres (15 points) Q 1 Expliquez pourquoi en JAVA, il est possible de
modifier le contenu d'un objet qui est passé en paramètre d'une méthode. Justifier votre
réponse.
Réponse correcte : 2) NON 2. Questions libres (15 points) Q 1 Expliquez pourquoi en JAVA, il est
possible de modifier le contenu d'un objet qui est passé en paramètre d'une méthode. Justifier
votre réponse.
Partie 2 - Questions libres (corrigées)
Q1. Expliquez pourquoi en JAVA, il est possible de modifier le contenu d'un objet qui est passé
en paramètre d'une méthode. Justifier votre réponse.
Réponse : En Java, tous les paramètres sont passés par valeur. Lorsqu’on passe un objet à une
méthode, la valeur transmise est une copie de la référence vers l’objet. La méthode peut donc
modifier l’état interne de l’objet via cette référence (ex. changer des attributs). Ces
modifications restent visibles après l’appel. En revanche, réaffecter le paramètre (ex. param =
new Objet()) ne modifie pas la référence du côté appelant, car seule la copie locale de la
référence a changé.
Q2. En JAVA, il existe deux classes différentes, String et StringBuffer, qui permettent de gérer
les chaînes de caractères. Quelle est la différence importante entre ces deux classes ? Citez un
exemple original pour lequel vous utiliseriez la classe StringBuffer.
Réponse : String est immuable : une “modification” crée une nouvelle String. StringBuffer est
mutable : on modifie la même instance avec append/insert/delete. StringBuffer est synchronisé
(thread-safe) ; en mono-thread on préfère souvent StringBuilder. Exemple : construire
efficacement un long texte dans une boucle (rapport, journal, liste d’opérations) sans créer de
nombreuses Strings intermédiaires.
Q3. Expliquez ce qu'est un package en JAVA.
Réponse : Un package est un espace de noms qui regroupe des classes et structure un projet. Il
correspond généralement à une arborescence de dossiers (ex. [Link] -> fr/cnam/projet).
Il se déclare en première ligne d’un fichier .java avec le mot-clé package. Les imports permettent
d’utiliser des classes d’autres packages.