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
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
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
oui mais pourquoi parfois on fait
Classe objet; (sans le new) ?
Salut,
Parce qu'on instancie l'objet et on affecte la variable plus tard.
Par exemple :
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 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 } }
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.
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.
En fait, l'écriture
Revient à écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part Classe objet;
Tu déclares une variable mais tu ne lui affectes aucune valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Classe objet = null;
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 :
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 = null; o.equals(null);
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Object o ; o.equals(null); // ERREUR
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
EDIT : suppression du bout de code avec une erreur grossière de ma part
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(); } }
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 :
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.
@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
Partager