IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Déclaration ou instant citation objet


Sujet :

Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Par défaut Déclaration ou instant citation objet
    Bonsoir,

    J'ai une question j'ai du mal à comprendre la différence entre.

    Classe objet;

    Et

    Classe objet = new class();

    Instance action , déclaration ?

    Merci

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Déclaration puis instanciation :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaClasse objet;
    objet = new MaClasse();

    L'équivalent en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaClasse objet = new MaClasse();
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Par défaut
    oui mais pourquoi parfois on fait

    Classe objet; (sans le new) ?

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par mailoy Voir le message
    oui mais pourquoi parfois on fait

    Classe objet; (sans le new) ?
    Parce qu'on instancie l'objet et on affecte la variable plus tard.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Exemple {
     
       private File file; // déclaration
     
       public Exemple(File file) {
           this.file = file; // initialisation
       }
     
       public Exemple(String path) {
           this.file = new File(path); // initialisation
       }
     
    }
    Il y a aussi ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public enum Type {
        UPPER, LOWER, CAPUPPER, WORDUPPER;
    }
     
    public static String changeCasse(Type casse, String string) {
         Objects.requiredNonNull(casse);
         Objects.requiredNonNull(string);
         if ( string.isEmpty) return string;
         String newString; // declaration
         switch(  casse ) {
             case UPPER:
                  newString = string.toUpperCase(); // affectation
                  break;
             case LOWER:
                  newString = string.toLowerCase(); // affectation
                  break;
             case CAPUPPER:
                  newString = toUpperCap(string); // affectation
                  break;
             case WORDUPPER:
                  StringBuilder sb=new StringBuilder(string.length);
                  for(String word = string.split(" ")) {
                       if ( sb.length>0) sb.append(" ");
                       sb.append( toUpperCap(word) );
                  }
                  newString = sb.toString(); // affectation
                  break;
             default:
                 throw new IllegalStateException("Valeur non gérée : "+casse);
         }
         return newString;    
    }
     
    private static String toUpperCap(String string) {
       return string.charAt(0.toUpperCase()+string.subString(1);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Par défaut
    dans ton premier exemple on créer pas de nouvel objet c'est ça, on prend cela qu'on passe en paramétres?

    Merci

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mailoy Voir le message
    dans ton premier exemple on créer pas de nouvel objet c'est ça, on prend cela qu'on passe en paramétres?

    Merci
    Oui, c'est pour ça que j'ai écrit "affectation" : qu'on affecte une référence d'un objet existant, ou celle d'un nouvel objet, ça ne change rien au niveau de la déclaration et de l'affectation.

    Si tu veux, on peut ajouter un contructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Exemple {
     
       private File file; // déclaration
     
       public Exemple() {
           this.file = new File(System.getProperty("user.home")); // initialisation
       }
     
       /* ... */
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    En fait, l'écriture
    Revient à écrire
    Tu déclares une variable mais tu ne lui affectes aucune valeur.


    A savoir qu'il y a quand même une différence au niveau de la compilation, parce que dans un cas, le compilateur est en mesure de te dire que ta variable n'est pas initialisée :
    Ici, ça compile mais ça plantera à l'exécution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Object o = null;
    o.equals(null);
    Ici, tu auras une erreur à la compilation en te disant que ta variable n'est pas initialisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Object o ;
    o.equals(null); // ERREUR
    Mais ceci ne marche que dans le cas où tu déclares ta variable et son utilisation dans un même bloc. Dans le cas des propriétés, tu peux les déclarer sans initialisation et essayer des les utiliser après même si rien ne permet de les modifier :
    Ce code est parfaitement légal même s'il a 100% de chances de planter lors de l'exécution de la méthode doStuff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class TestClass {
     
    	private Object o;
     
    	public void doStuff(){
    		o.hashCode();
    	}
    }
    EDIT : suppression du bout de code avec une erreur grossière de ma part

  8. #8
    Membre confirmé
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2012
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 124
    Par défaut
    Merci bien à vous j'ai bien compris

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    En fait, l'écriture
    Revient à écrire
    Oui, enfin quand objet est une variable de classe. Mais pas quand il s'agit d'une variable locale à un bloc : dans ce cas, elle n'aura de valeur que lorsqu'il y aura explicitement affectation.

    D'ailleurs, le code suivant ne compile pas :

    Citation Envoyé par eulbobo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    InputStream is;
    try {
        is = new FileInputStream(fichier);
        // des trucs avec l'inputStream
    } catch (Exception e){
       // gestion de l'erreur
    } finally {
        try {if (is != null) is.close();} catch (Exception e){// erreur à la fermeture du flux}
    }
    parce que le new FileInputStream(fichier) peut planter avant toute affectation de is, la ligne try {if (is != null) is.close();} catch (Exception e){// erreur à la fermeture du flux} ne compile pas avec l'erreur "The local variable is may not have been initialized".
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    @joel.drigo : oui, je le dis plus haut et je fais le contraire plus bas... Manque de café moi...
    D'ailleurs, ça ne compile pas surtout parce que l'accolade fermante est perdue dans le commentaire :p

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/08/2013, 21h03
  2. Déclaration dynamique de variables objets
    Par Anduriel dans le forum Langage
    Réponses: 7
    Dernier message: 04/08/2013, 15h28
  3. Déclaration de tableau d'objets
    Par tim1789 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/07/2010, 14h48
  4. Réponses: 13
    Dernier message: 01/06/2006, 17h20
  5. [Convention]déclarations des objets
    Par allstar dans le forum Langage
    Réponses: 4
    Dernier message: 17/11/2005, 00h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo