Exercices dirigés n°4

publicité
ED n°4
Exercices dirigés n°4
Résultat de l'exécution du programme suivant :
public class ED4 {
private int x = 0;
private static int y = 0;
public ED4(int x,int y){
this.x = x;
this.y = y;
}
void println( int a ){
int x = 1;
System.out.println(a);
x=x+5;
System.out.println(x);
System.out.println(this.x);
System.out.println(y);
y=y+2;
}
public static void main( String[] args ){
ED4 obj = new ED4(5,10);obj.println(45);
System.out.println(ED4.y);
}
}
Exécuter le programme suivant (C1.java):
public class C1{
public static void main(String[] args){
B b = new B();
}
}
class A{
public A(){
System.out.println("Je suis dans A");
}
}
class B extends A{
public B(){
System.out.println("Je suis dans B");
}
}
1
ED n°4
Quel est le résultat de l'exécution de ce programme (C2.java)? Le constructeur sans paramètre de
la classe Object est-il invoqué lorsque new B(5) est exécuté :
public class C2{
public static void main(String[] args){
B b = new B(5);
}
}
class A{
public A(){
System.out.println("Je suis dans A);
}
}
public class B extends A{
public B(int x){
System.out.println("Je suis dans B");
}
}
Quels sont les problèmes identifiés à la compilation dans ce fichier source (C3.java):
public class C3{
public static void main(String[] args){
B b = new B();
}
}
class A{
public A(int x){
System.out.println("Je vaux: "+x);
}
}
public class B extends A{
public B(){
System.out.println("Je suis dans B");
}
}
La classe B peut-elle être compilée ? Quelle que soit la réponse, déterminer le modificateur le plus
adapté aux membres i et m de la classe A ?
// fichier A.java
package p1;
public class A{
int i;
void m(){System.out.println("i= "+i);}
}
// fichier B.java
package p1;
public class B extends A{
public void main(String[] args){
System.out.println("i= "+i);
m();
}
}
2
ED n°4
Les assertions suivantes sont elles vraie ou fausse ?
- un membre protected (donnée ou méthode) peut-il être accédé par n'importe quelle classe
du même package ?
- un membre protected (donnée ou méthode) peut-il être accédé par n'importe quelle classe
de différents packages ?
- un membre protected (donnée ou méthode) peut-il être accédé par ses sous-classes de
différents packages ?
- une classe final peut-elle être instanciée ?
- une classe final peut-elle être étendue (dérivée) ?
- une méthode final peut-elle être surchargée ?
Déterminer 2 façons de compléter le programme suivant pour que le constructeur de la classe B
initialise les variables d'instance x et y :
public class A{
protected int x,y;
public A( int x,int y ){
this.x = x;this.y = y;
}
}
public class B extends A{
private int r;
public B( int x,int y,int r ){
this.r = r;
}
}
Etant donné le morceau de code :
try{
m1();
throw new E1();
m2();
}
catch( E2 e){...}
catch(E3 e){...}
m3();
- m2() sera-t-il exécuté ?
- m3() sera-t-il exécuté ?
Etant donné le morceau de code :
try{
m1();
throw new E2();
m2();
}
catch( E2 e){...}
catch(E3 e){...}
m3();
- m2() sera-t-il exécuté ?
- m3() sera-t-il exécuté ?
3
ED n°4
Etant donné le morceau de code :
try{
m1();
throw new E2();
m2();
}
catch( E1 e){...}
catch(E3 e){throw e;}
finally{m4();}
m3();
- m3() sera-t-il exécuté ?
- m4() sera-t-il exécuté ?
Qu'affiche le programme suivant :
public class C8{
static class E3 extends RuntimeException{}
static class E2 extends RuntimeException{}
static class E1 extends RuntimeException{}
public static void main(String[] args){
int x = 1;
try{
m1();
if( x!=1) throw new E3();
m2();
}
catch( E1 e){m1();}
catch(E3 e){throw e;}
finally{m4();}
m3();
}
}
static
static
static
static
void
void
void
void
m1(){ System.out.println("m1");}
m2(){System.out.println("m2");}
m3(){System.out.println("m3");}
m4(){System.out.println("m4");}
- m3() sera-t-il exécuté ?
- m4() sera-t-il exécuté ?
4
ED n°4
Soit le programme Java suivant:
import java.util.Scanner;
public class Arret {
// =============================================================
public static int saisir(){
int x ;
System.out.println("Entrez un entier positif : ");
Scanner in = new Scanner(System.in);
x = in.nextInt();
if (x < 0){
throw new Stop2();
}
if (x == 0) {
throw new Stop();
}
return x;
}
// =============================================================
public static int calculer (){
int x1 = 0;
int x2 = 1000;
x1 = saisir();
try {
x2 = saisir();
}catch (Stop e){
System.out.println("recupere une exception Stop");
}
return x1+x2;
}
// =============================================================
public static void main(String [] args) {
int y = 99999;
System.out.println("Debut main");
try {
y = calculer();
System.out.println("main OK");
} catch (Stop e){
System.out.println("main PB1");
} catch (Stop2 e){
System.out.println("main PB2");
}
System.out.println("le resultat calcule vaut = " + y);
System.out.println("main FIN");
}
}
class Stop extends RuntimeException {}
class Stop2 extends RuntimeException {}
Question 1
Exécuter ce programme pour différents couples d'entiers saisis au clavier par exemple : 1 puis 3, 1
puis 0, 0 puis 1, -1 puis 1, 1puis -1
Expliquer pour chaque exécution les affichages constatés.
Question 2
Transformer la déclaration de Stop en class Stop extends Exception{};, qu'observez
vous ? Comment corriger cette erreur ?
5
Téléchargement