Correction activité 1 chapitre 1 avancée
Exercice 1
Les méthodes qui ne peuvent pas être static sont les constructeurs ou celles qui utilisent des variables
d’instance ou invoquent des méthodes d’instance sans référence. Par conséquent sont dans ce
programme : VerificationStatic, afficher, ajouter, plusGrand
package dadbd24;
public class VerificationStatic {
int x, y;
String nom;
static final float g=9 ;
VerificationStatic (String n, int a, int b){
nom=n;
x=a;
y=b;
}
void afficher(){
[Link](nom + " " + x + " " + y);
}
void ajouter(VerificationStatic obj){
x = x + obj.x;
y = y + obj.y;
nom = nom + [Link];
// g=7 ;// g ne peux pas être modifié
}
static VerificationStatic nouveau(int n){
VerificationStatic res = new VerificationStatic ("aaa",3,5);
res.x = (int)( n+g);
res.y = n*2;
[Link] = "Auto_"+n;
return res;
}
boolean plusGrand(VerificationStatic obj){
if (obj.x == x){
return y>obj.y;
} else{
return x>obj.x;
}
}
static boolean comparer(VerificationStatic obj1, VerificationStatic obj2){
if (obj1.x == obj2.x){
return obj1.y>obj2.y;
}else{
return obj1.x>obj2.x;
}
}
public static void main(String[] args) {
VerificationStatic v1=new VerificationStatic("ok",3,5);
VerificationStatic v2=new VerificationStatic("Yes",7,14);
comparer(v1,v2);
nouveau(8);
[Link](v2);
[Link]( [Link](v1));
}
}
Exercice 2
1. class Essai{
2. int y, x;
3. final static float z=3.0 ; //manque f après 3.0
4. int m1(){// type de retour doit être float
5. int f ;
6. return f+z; // f n’est pas initialisé ………………..………………
7. }
8. static void m2(final int h){
9. h=5; // on ne peut pas modifier la valeur de h car elle est déclarée final. h reçoit sa valeur
// initiale lors de l’invocation de m2()
10. [Link](h+x); //x variable d’instance ne peut pas être utilisé dans une
//méthode static sans référence
11. }
12. public static void main(String [] a){
13. Essai e=new Essai();
14. e.m2();//warning : méthode static => pas besoin d’une référence pour l’appeler
15. m1();// méthode d’instance doit être invoquée à l’aide d’une instance car elle est appelé depuis
une méthode static. Correction : e.m1() ;
16. x=7; //variable d’instance doit être utilisé avec son instance (car x ici est utilisé dans une
//méthode static). Correction : e.x=7 ;
17. }
Application 2
Soit la classe suivante :
package packA ;
public class A {
public int i ;
private int a;
protected int b;
int c;
public void afficher() { [Link](i+a+b); }
}
Indiquer si les classes suivantes compilent. Indiquer les erreurs en cas de non compilation.
package packA ;
public class B extends A {
public void traiter() { [Link](i+a+b+c); }
}
Erreur de compilation au niveau de la dernière instruction. La variable a est private, n’est pas
accessible hors de sa classe A
package packA ;
public class E {
public B b = new B();
public void traiter() { [Link]();}
}
Il n’y a pas d’erreur de compilation. La classe B hérite la méthode afficher de A et donc, cette
méthode peut être invoquée à l’aide d’une instance de type B
package packD ;
import packA.A;
public class D {
public A k = new A();
public void traiter() { [Link](k.c + k.i + k.b); }
}
Erreur de compilation au niveau de la dernière instruction. Les variables c et b sont inaccessible
hors de leurs package
package packF;
import packA.A;
public class F extends B{
public void traiter() { [Link](i+b+c); }
}
Erreur de compilation au niveau de la derniere instruction. La variable a est private, n’est pas
accessible hors de sa classe classA
package packF;
import packA.A;
public class F extends A{
public void traiter() {
[Link](i+b);
A k = new A();
[Link](k.i+k.b);
}
}
Erreur de compilation au niveau de la dernière instruction. La variable b est protected, n’est pas
accessible hors de son package par une instance de la classe mère (A), mais, accessible hors de son
package par héritage avec une instance de la classe fille, cas de la première instruction d’affichage.