Vous êtes sur la page 1sur 14

Auto valuation de Java

Supmca

Celui qui cesse d'largir ses connaissances et


de fortifier son caractre, c'est--dire de
travailler sur soi afin de tirer de soi le
meilleur parti possible, a cess de vivre [...]
Thomas Bernhard

Exercices dautovaluation (Partie I)


Aspects non objets : expressions, instructions, mthodes, signatures,
Prparation des premier et second QCM
Pour transformer un code lisible en code comprhensible par la machine, on utilise :
Un compilateur
Un excuteur
Un transformateur
Un traducteur

Pour avoir un commentaire sur une ligne, on place en dbut de ligne le(s) caractre(s) :
//
#
'
%

Lequel n'a pas sa place parmi ces choix :


instanceof
select
for
volatile

Lequel de ces identificateurs est incorrect :


ToTaL
nom_prenom
2emechoix
valeur$

De quel type primitif est le littral 25.5F ?


double
float
long
short

Un retour la ligne est un caractre.


vrai
faux

Pour dclarer une variable de type primitif int qui a pour nom jour, il faut crire :
int jour;
declare(type int) : jour;
dim jour as integer;
jour = new int;

Pour spcifier la valeur d'une variable ne peur changer, on la dclare comme une
constante avec le mot cl :
finalize
const
define
final

Trouvez la ligne incorrecte :


int somme = 15;
int somme=15;
i nt somme = 1 5 ;

Florent COUFFIN

1/19

29 octobre 2009

Auto valuation de Java

Supmca

Lequel n'est pas une expression ?


x+4
3 * (y - 2) + 1 % 1
(27 + 2 / 3) <= 3 - 1
(2 == x - 7 * 3) + 1

Quelle est la valeur de l'expression x = 3 * a / 2.0F si l'on suppose que a est une variable
de type int qui vaut 7, que x est une variable de type float et que la valeur de x avant
affectation est 12 ?
12.0
10.5
Ce n'est pas une expression
10.0

Quel est le rsultat de l'expression 39 % 7 ?


4
5
5.6
6

Quelle est la valeur de l'expression 5 * 3 >= 3 + 5 * 2 ?


false
true

Quelle est la valeur de l'expression 17 >= 8 * 2 && ! (17 / 2 >= 8) ?


true
false

Quelle est la valeur de l'expression boolean a = (boolean) 1


true
false
erreur de compilation

Que va afficher la console le programme ci-dessus (diffre du C) ?


public static void main(String[] args)
{
int x = 0;
x = x+++2;
System.out.println (x);
}
0
1
2
3

Supposons qu'on aie dclar char c = 'a';, que vaudra l'expression (int) c ?
On ne peut pas le faire, c'est une narrowing conversion !
On ne peut pas convertir un type caractre en type entier
97, le code ASCII de la lettre a
0, tous les caractres convertit en char valent 0

Pourquoi est-il quivalent d'crire double x = 2; et double x = 2D; ?


Ce n'est pas du tout quivalent !!!
Car le littral 2 est considr comme un type primitif double
Car l'oprateur = est galement un oprateur de conversion
Car on a une conversion par affectation et le littral 2 de type primitif int est convertit en
double

Que vaut le rsultat de l'affectation int x = 1F / 8; ?


0.125
0
Florent COUFFIN

2/19

29 octobre 2009

Auto valuation de Java

Supmca

Une erreur de compilation


Une erreur d'excution

Que vaut le rsultat de l'affectation float z = 3.2/2;?


1.6
1.6f
Une erreur de compilation
Une erreur d'excution

Que va afficher le code la console ?


System.out.print(5.F/0);
0
Infinity
Une erreur de compilation
Une erreur d'excution

Que va afficher le code la console ?


System.out.print(5/0);
0
Infinity
Une erreur de compilation
Une erreur d'excution

Qu'elle est la valeur de l'expression 2 * 3 + 1 == 5 + 2 && 1 + 3 * 1 <= 8 / 2 ?


true
false

Lequel n'a pas sa place dans cette liste


if
do
switch
?:

Toute instruction if peut s'crire comme une instruction switch quivalente :


vrai
faux

Que va afficher le code la console ?


int x = 5;
double y = 3.5;
if (x > 5 && y > x || x + 3 < y + 1)
System.out.println ("A");
else if (x < y + 1 && x + y <= 12)
System.out.println ("B");
else
System.out.println ("C");
A
B
C
Rien du tout, le code ne compile pas !

Que va afficher le code la console ?


int x = 7;
switch (x)
{
case 6:
case 7:
case 8:
System.out.println ("A");
case 9:
Florent COUFFIN

3/19

29 octobre 2009

Auto valuation de Java

Supmca

case 10:
System.out.println ("B");
break;
default:
System.out.println ("C");
}
A
B
C
Autre chose
Rien du tout, le code ne compile pas !

Laquelle de ces propositions est quivalente au code donn sachant que les variables x et
y sont de type int ?
int z;
if (x > 5 && x < y)
z = 3;
else
z = 45;
int z = x > 5 && x < y ? 45 : 3;
int z = 6 <= x && y >= x + 1 ? 3 : 45;
int z = ! x > 5 && ! x < y ? 45 : 3;
int z = x + 1 >= 6 && x < y ? 3 : 45;

Que va produire le code ci-dessous ?


for ( ; ; ){}
Une erreur de compilation
Une erreur d'excution
Une boucle infinie
Rien du tout, c'est comme-ci on n'avait rien mis

Dans laquelle de ces instructions serait-il trange de voir une instruction break ?
do
for
switch
if-else

Que va afficher le code la console ?


int []t ;
t[0]=1;
System.out.println(t[0]);
Une erreur de compilation
Une erreur d'excution
0
1

Que va afficher le code la console ?


int []t = {2,3,4} ;
for(int i =0; i < t.length -1; i++)
System.out.println(t[i]);
Une erreur de compilation
Une erreur d'excution
23
234

Que va afficher le code la console ?


int []t = {2,3,4} ;
for(int i =0; i < 4; i++)
System.out.println(t[i]);
Une erreur de compilation
Florent COUFFIN

4/19

29 octobre 2009

Auto valuation de Java

Supmca

Une erreur d'excution


23
234

Que va afficher le code la console ?


int []t = {2,3,4} ;
t = new int[5];
System.out.println(t[0]);
Une erreur de compilation
Une erreur d'excution
0
2

Que va afficher le code la console ?


int [][]t ;
t = new int[2][];
t[0] = new int[3];
t[1] = new int [] {3,4,5,6};
System.out.println(t.length + t[0].length + t[1].length);
Une erreur de compilation
0
9
6

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
int []t = {1,2};
int b =1, c;
c = fonction(b,t);
System.out.println(c + " " +t[0] + " " +t[1] + " " + b);
}
static int fonction(int a, int []tb){
tb[0]++;
a++;
tb[1] = a;
return tb[0] + tb[1];
}
}
4221
4222
4121
Une erreur de compilation

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
int []t = {1,3,5,7,9,11, 13};
fonction(0,t);
for(int i = 0; i < t.length; i++) System.out.print(t[i] + "
");
}
static void fonction(int a ,int []tb){
if(a < tb.length - 1) {
int b = tb[a];
tb[a] = tb[a+1];
tb[a+1] = b;
fonction(a + 2 ,tb);
}
else return;
Florent COUFFIN

5/19

29 octobre 2009

Auto valuation de Java

Supmca

}
}
1 3 5 7 9 11 13
3 1 7 5 11 9 13
13 3 5 7 9 11 1
0123456

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
fonc(3);
}
public static void fonc(int n) {
if (n > 0) {
System.out.print(n -- + " ");
fonc(n);
}
}
}
Rien
Une boucle infinie
432
321
3210

Florent COUFFIN

6/19

29 octobre 2009

Auto valuation de Java

Supmca

Changer les choses de place, c'est le travail


des hommes : il faut choisir de faire cela ou
rien.
Albert Camus

Exercices dautovaluation (Partie II)


Aspects Objets hors hritage, constructeurs, variables statiques,
Prparation des premier et second QCM
Lequel n'a pas sa place dans cette liste
9
"cool"
'c'
18L

Que ne fait pas cette instruction Java ?


Date today = new Date();
Dclaration d'une nouvelle variable
Cration d'un objet
Invocation d'une mthode
Opration d'affectation

Quelle est la syntaxe correcte pour un appel de mthode qui renvoie un rsultat ? (On
possde une variable String mystring;)
int longueur = mystring.length;
int longueur = mystring.length();
int longueur = mystring::length;
int longueur = mystring["length"];

Que va provoquer l'excution de ce morceau de code ?


int longueur = "Mercedes ML".length();
Une erreur de compilation
Une erreur d'excution
Une affectation de la longueur de la chane dans la variable longueur
Rien du tout

Comment peut-on connatre les paramtres fournir pour crer un nouvel objet ? En
consultant ...
Les constructeurs
Les mthodes
Les packages
Les librairies

Que va afficher cette instruction la console ?


System.out.println (4 + 5 + " enfants");
45 enfants
9 enfants
0
0 enfants

Qu'est-ce-qu'une classe par rapport un objet


Un objet est une instance d'une classe
Une classe est une instance d'un objet
Il n'y a aucun lien entre classe et objet

Cette dclaration est faite dans une classe Person. O cette variable ne sera-t-elle pas
visible ?
private int age;
Dans les mthodes de la classe Person
Dans le corps de la classe Person
Dans le code qui utilise un objet de la classe Person
Nulle part, elle sera visible partout
Florent COUFFIN

7/19

29 octobre 2009

Auto valuation de Java

Supmca

Que manque-t-il pour que cette dclaration de mthode compile ?


public somme (int a, int b)
{
return a + b;
}
Rien du tout, c'est correct
Il manque le type de retour
On ne peut pas renvoyer directement a+b, il faut crer une variable locale, y placer le
rsultat de a+b puis la renvoyer
Il manque le modificateur private

Voici un constructeur de la classe Person, y-a-t'il un quelconque problme ?


public Person (String n)
{
name = n;
return;
}
On ne peut pas utiliser return dans un constructeur puisqu'il ne doit rien renvoyer
Un constructeur doit renvoyer une instance, il faut donc mettre return new Person (n);
Aucun problme, return permet simplement de quitter la mthode
Il faut explicitement mettre void si l'on veut pouvoir faire return

Peut-on toujours afficher un objet la console en utilisant System.out sans devoir ajouter
une mthode public String toString();
Oui
Non

Lorsque plusieurs mthodes ont le mme nom (surcharge), comment la machine virtuelle
Java sait-elle laquelle on veut invoquer ?
Elle les essaie toute une une et prend la premire qui fonctionne
Elle ne devine pas, il faut lui spcifier lorsqu'on compile le code
On indique le numro de la mthode que l'on veut invoquer
Elle se base sur les types des paramtres

Lorsque des mthodes ont le mme nom que des donnes membres (champs) prfixes
de get, on les appelle des
Ascenseurs
Altrateurs
Accesseurs
Animateurs

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
Test m = new Test(1,2);
m.print();
}
private int x, y;
public Test(int x, int y) {
x=x;
y=y;
}
public void print() {
System.out.println(x + " " + y);
}
}
12
00
Florent COUFFIN

8/19

29 octobre 2009

Auto valuation de Java

Supmca

Une erreur dexcution


Une erreur de compilation

Que va afficher le code la console ?


public class Test {
private static int cpt;
private int x = 1;
static public void main(String [] args) {
Test t1 = new Test();
Test t2 = new Test(5);
}
public Test() {
this(2);
cpt ++;
System.out.print(" " + x + " " + cpt);
}
public Test(int nx) {
x = nx + 1;
System.out.print(" " + x + " " + cpt);
}
}
303233
303161
Une erreur dexcution
Une erreur de compilation

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
Test m = new Test();
}
private static int N = 2;
private int x = 1, y = x + N;
public Test() {
System.out.println("" + x + y + N);
}
}
000
132
112
123

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
Maclass m1 = new Maclass(3,4);
Maclass m2 = new Maclass(5,6);
m1.test(m2, m2);
m1.print();
m2.print();
}
}
class Maclass {
private int x = 1, y = 2;
public Maclass(int a, int b) {
x = a;
Florent COUFFIN

9/19

29 octobre 2009

Auto valuation de Java

Supmca

y = b;
}
public void print(){
System.out.println("" + x + y );
}
public static void test(Maclass c1, Maclass c2){
Maclass t = c1;
c1 = c2;
c2 = t;
}
}
0000
5634
3456
3434

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
Maclass m = new Maclass();
}
}
class Maclass {
private static int N = 2;
private int x = 1, y = x + N;
public Maclass() {
System.out.println("" + x + y + N);
}
}
000
132
143
112

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
Maclass m = new Maclass();
}
}
class Maclass {
private static int N = 2;
private int x = 1, y = x + N;
public Maclass() {
System.out.println("" + x + y + N);
}
}
000
132
143
112

Que va afficher le code la console ?


public class Test {
static public void main(String [] args) {
Maclass m = new Maclass();
}
}
class Maclass {
Florent COUFFIN

10/19

29 octobre 2009

Auto valuation de Java

Supmca

private int x = 1, y = 2;
public Maclass() {
}
public Maclass(int a, int b) {
x = a;
y = b;
System.out.println("" + x + y );
}
}
Rien
00
12
21

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
MaClass m = new MaClass();
m.print();
}
}
class MaClass {
private int x, y;
public MaClass(int nx, int ny) {
x = 1;
y = 2;
}
public void print() {
System.out.println(x + " " + y);
}
}
12
00
Une erreur dexcution
Une erreur de compilation

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
MaClass m = new MaClass();
m.print();
}
}
class MaClass {
private int x, y;
public MaClass(int nx, int ny) {
x=nx;
y=ny;
print();
}
public MaClass() {
this(1);
print();
}
public MaClass(int nx) {
this(nx, nx);
print();
Florent COUFFIN

11/19

29 octobre 2009

Auto valuation de Java

Supmca

}
public void print() {
System.out.print(x + " " + y + " ");
}
}
1111
111111
11111111
Une erreur de compilation

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
MaClass m1 = new MaClass();
MaClass m2 = new MaClass();
}
}
class MaClass {
private int x, y;
static {
System.out.print(0 + " ");
}
{
System.out.print(1 + " ");
}
public MaClass(int nx, int ny) {
x=nx; y=ny;
System.out.print(2 + " ");
}
public MaClass() {
this(0,0);
System.out.print(3 + " ");
}
}
0231231
02310231
01230123
0123123
public class Test {
static public void main(String [] args) {
Maclass m = new Maclass();
}
}

Que va afficher le code la console ?


class Maclass {
private int x = 1, y = 2;
static int c;
public Maclass() {
this(c,c);
}
public Maclass(int a, int b) {
x = a;
y = b;
System.out.println("" + x + y );
}
}
Rien
00
Florent COUFFIN

12/19

29 octobre 2009

Auto valuation de Java

Supmca

12
21

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
MaClass m1 = new MaClass();
MaClass m2 = new MaClass();
m1.print();
m2.print();
}
}
class MaClass {
private static int cp ;
private int n;
static {
cp = 1;
}
public MaClass() {
n = cp++;
}
public void print() {
System.out.print(n + " " + cp + " ");
}
}
2233
0212
1323
1234

Que va afficher le code la console ?


public class C1 {
static public void main(String[] ts){
MaClass [] m1 = new MaClass[10];
MaClass.print();
}
}
class MaClass {
private static int cp ;
private int n;
static {
cp = 1;
}
public MaClass() {
n = cp++;
}
public static void print() {
System.out.print(cp + " ");
}
}
0
10
1
Une erreur de compilation

Que va afficher la console le code suivant ?


String name;
int longueur = name.length();
System.out.println ("Longueur de la chaine " + name + " : " + longueur) ;
Florent COUFFIN

13/19

29 octobre 2009

Auto valuation de Java

Supmca

Longueur de la chaine null : 0


Longueur de la chaine : 0
Une erreur d'excution
Une erreur de compilation

Que va afficher la console le programme suivant ?


// La classe Nombre
public class Nombre
{
private int valeur;
public Nombre(int valeur)
{
this.valeur = valeur;
}
public void change(int nouvellevaleur)
{
valeur = nouvellevaleur;
}
public String toString()
{
return String.valueOf(valeur);
}
// Mthode main
public static void main (String[] args)
{
Nombre n1, n2;
n1 = new Nombre(8);
n2 = n1;
n1.change(9);
System.out.println (n2);
}
}
1
Une erreur de compilation
8
9

Que va afficher la console le programme suivant ?


Integer nb1 = new Integer(4);
Integer nb2 = new Integer(4);
System.out.println(nb1 == nb2);
true
false
4
1

La mthode dont la signature est donne ci-dessous se trouve dans la classe Math,
comment faire pour calculer le sinus de 1 radian ?
public static double sin (double angle);
Math m = new Math(); m.sin (1);
new Math().sin (1);
Math.sin (1);
Math.static.sin (1);

Florent COUFFIN

14/19

29 octobre 2009