Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation static pour un objet

Cours OCR Java

Sujet résolu
    7 février 2022 à 1:00:52

    Hello à tous ! :)

    Pour apprendre je refais les exemples JAVA à la main, ça me sert à retenir et surtout à comprendre ce qui se passe. (vive les erreurs...)

    J'ai une question pour laquelle la réponse ne semble pas se trouver sur internet. En effet un code effectué sur OCR et sur un IDE semble ne pas fonctionner de la même manière... Je m'explique.

    Sur le cours ce code fonctionne :

    En retapant exactement ce même code (en changeant certains passages pour l'entrainement, j'arrive avec celui-ci :

    package exerciceParametres;
    
    public class creerObjet {
    
    	public static void main(String[] args) {
    		// On créer une nouvelle Marque
    		Marque apple = new Marque("Apple");
    		System.out.println(apple.nom);
    	}
    
    	class Telephone {
    		int pixel;
    		String nom;
    		Marque marque;
    
    		// Pour utiliser l'objet créé il faut un constructeur.
    
    		public Telephone(int pixel, String nom, Marque marque) {
    			this.pixel = pixel;
    			this.nom = nom;
    			this.marque = marque;
    		}
    
    	}
    
    	// on créer Marque à part car une part peut contenir plusieurs noms de téléphone
    	class Marque {
    		String nom;
    
    		public Marque(String nom) {
    			this.nom = nom;
    		}
    	}
    
    }
    

    Sauf que pouf, ça ne fonctionne pas! 

    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    	No enclosing instance of type creerObjet is accessible. Must qualify the allocation with an enclosing instance of type creerObjet (e.g. x.new A() where x is an instance of creerObjet).
    
    	at exerciceParametres.creerObjet.main(creerObjet.java:7)
    


    J'ai remarqué qu'en remplaçant ce passage

    class Marque {
    		String nom;
    
    		public Marque(String nom) {
    			this.nom = nom;
    		}
    	}

    par celui-ci (ajout de static)

    static class Marque {
    		String nom;
    
    		public Marque(String nom) {
    			this.nom = nom;
    		}
    	}

    Pouf ça fonctionne :euh:.

    Alors c'est super cool, j'ai pu trouver ce moyen de "secours" sur internet mais ça ne répond pas à ma question de base: pourquoi moi sur mon IDE je dois préciser static alors que sur le cours ce mot n'apparaît pas et ne semble pas nécessaire. Pourriez-vous m'expliquer cette différence svp?

    Je vous fait un gros calin pour avoir lu et peut-être me répondre.

    :ange:
     Merci à tous

    • Partager sur Facebook
    • Partager sur Twitter
      7 février 2022 à 9:47:20

      Parce que tu as mal place un bracket {

      Dans l'exemple original, il y a 3 classes distinctes dans un même fichier, dans le tiens, a cause du { mal place, Telephone et Marque font partie de la classe creerObjet(inner classes), et donc si elles ne sont pas statiques, elles ont besoin d'une instance de creerObjet, ce qui découlerait en un magnifique new creerObjet().new Marque(...);

      Pour résumer:

      Plusieurs classes distinctes dans un seul fichier, c'est mal: risque d'erreur, perte de lisibilite

      La convention d'écriture des classes est de commencer par une majuscule suivi de minuscules: CreerObjet https://www.oracle.com/java/technologies/javase/codeconventions-namingconventions.html

      Elles devrait aussi être un nom: ObjectCreator ou simplement Exercice1

      Les autres erreurs de conception sont probablement voulues par l'approche didactique(encapsulation, mutabilité, scope) et seront corriges au fil du cours j'espère, cependant les conventions sont a appliquer des le début et ce cours ne s'y attache pas, personnellement je te conseille d'en chercher un autre.

      -
      Edité par P.X.L 7 février 2022 à 9:48:24

      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2022 à 1:23:28

        Hello PXL,

        Merci beaucoup d'avoir pris le temps de m'expliquer tout ça. J'ai compris mon erreur et j'ai pu la corriger.

        J'ai aussi, sur tes conseils et ceux d'autres personnes, plutôt penché vers un cours assez connu et réputé en anglais sur Udemy.

        Je te souhaite une belle journée et peut-être à bientôt.

        :)

        • Partager sur Facebook
        • Partager sur Twitter

        Utilisation static pour un objet

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown