Résolu [JAVA] Les instances petit problème.

Solutions (4)
Tags :
  • Java
|
Bonjour je viens vers vous du fait est que j'ai un gros doute dans l'instanciation JAVA je vous met un exemple rapide.

  1. public class Exemple{
  2. int chiffre;
  3.  
  4. public void test1(){
  5. chiffre = chiffre + 2;
  6. test2();
  7. }
  8.  
  9. public void test2(){
  10. chiffre = chiffre + 2
  11.  
  12. }
  13.  
  14.  
  15. }



Dans une seconde classe on instancie la première dans une fonction.
  1. public class instance{
  2.  
  3. public void lancement(){
  4. Exemple e = new Exemple();
  5. e.chiffre = 0;
  6. e.test1();
  7. }
  8.  
  9. }


Donc voila dans cet exemple on lance la fonction lancement() on instancie la classe Exemple et on attribut à la variable chiffre une valeur et on lance la fonction test1(); sachant que test2(); est lancé par test1(); Est ce que la fonction Test2(); est instancier dans la même instance que Test1() ?
Contenus similaires
Meilleure solution
partage
|
Bonjour,

1°) Ou est la fonction main ? Si c'est une application Java core, ce programme ne fonctionnera pas si tu n'as pas de fonction main.
Tu pourrais par exemple, transformer ta méthode de la classe Instance telle qu'elle :

  1. public class instance{
  2.  
  3. public static void main(String[] args){
  4. Exemple e = new Exemple();
  5. e.chiffre = 0;
  6. e.test1();
  7. }
  8.  
  9. }


2°) C'est une mauvaise habitude, très mauvaise habitude d'avoir accès à une variable d'instance directement, sans passer par de l'encapsulation.
Si tu aimerais ajouter des traitements, tu vas devoir recoder entierement ta classe !

L'idéal, c'est de faire telle qu'elle :
  1. public class Exemple{
  2. private int chiffre;
  3. public int getChiffre(){
  4. return chiffre;
  5. }


  1. public void setChiffre(int c){
  2. this.chiffre = c;
  3. }


Naturellement, ton code dans Instance, eh ben il faut le revoir :
  1. public class instance{
  2.  
  3. public static void main(String[] args){
  4. Exemple e = new Exemple();
  5. e.setChiffre(0);
  6. e.test1();
  7. }
  8.  
  9. }



3°) Ton affectation de variable est non seulement inutile mais en plus va affecter les performances de ton application (même si ce sera pas visible pour ce type d'application). Donc :
  1. public class instance{
  2. public static void main(String[] args){
  3. Exemple e = new Exemple();
  4. e.test1();
  5. }
  6. }


Oui INUTILE, car quand tu déclares dans ta classe Exemple cette ligne "
  1. int chiffre;
" ou "
  1. private int chiffre;
", tu declares une variables d'instances qui a pour type un primitif "entier" qui naturellement a pour valeur par défaut "0". Et puisque tu n'as rien mis, ta valeur par défault sera 0, valeur que tu affectes dans la méthode instance devenue main() .. maintenant :) 

Maintenant, c'est un petit peu plus correcte, mais pas encore totalement ok ... cela dit ça compilera et fonctionnera à merveille.
  • Dreamcaster a sélectionné cette solution comme la meilleure réponse
  • HokeyPokey a édité ce message
  • HokeyPokey a édité ce message
  • HokeyPokey a édité ce message
  • HokeyPokey a édité ce message
  • Commenter cette solution |
Score
0
òh
òi
|
Je confirme toutes les réponses précédentes.

Je veux juste rajouter qu'il faut faire attention au vocabulaire pour être plus clair.
L'instance d'une classe est la création d'un objet : les méthodes ne sont pas instanciées, mais on peut les voir comme théoriquement liées à l'objet (même si ce n'est pas le cas en mémoire puisque ça fait partie du metaobjet).

Pour reformuler ce qui a été dit précédement, voilà comment fonctionne le compilateur :
Dans le code de "test1()", le compilateur voit l'appel à "test2()", alors il cherche une méthode du même nom dans les contextes parents de "test1()", et il trouve le test2() dans la même classe. Donc, il considère le "test2()" comme équivalent à "Exemple.this.test2()" (appel de la méthode membre "test2()" appliqué au même objet).
  • Commenter cette réponse |
Score
0
òh
òi
|
bonjour, les fonction test1 et test 2 sont deux méthodes de la class exemple, si tu instancie la classe exemple alors les deux méthodes sont accessible ... cependant bien que je ne soit pas un expert en JAVA, je doute du bon fonctionnement de ton code d'exemple ^^
  • Commenter cette réponse |
Score
0
òh
òi
, Animateur |
Bonjour,

Oui. Test2 va utiliser la même instance que Test1. Le résultat de la fonction test1 devrait donner 4.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS