Les constructeurs en java
Résolu/Fermé
seljazou
Messages postés
175
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
25 décembre 2009
-
29 nov. 2009 à 15:49
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 29 nov. 2009 à 17:59
seljazou Messages postés 175 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 25 décembre 2009 - 29 nov. 2009 à 17:59
Bonjour,
j'aimerai savoir si on est obligé de definir les constructeurs en JAVA AVANT de créer un objet.
merci :)
j'aimerai savoir si on est obligé de definir les constructeurs en JAVA AVANT de créer un objet.
merci :)
A voir également:
- Les constructeurs en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java décompiler - Télécharger - Langages
2 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
29 nov. 2009 à 16:16
29 nov. 2009 à 16:16
Salut,
apparemment oui, je viens de vérifier ;)
Si je ne m'abuse, les membres de ta classe seront instanciés à leur valeur « par défaut », c.-à-d. :
– 0 pour les nombres,
– "" pour les chaînes,
– '' pour les chars,
– etc.
Si certains de tes membres sont des objets, à toi de t'assurer que les instanciations se font comme tu l'attends ;)
apparemment oui, je viens de vérifier ;)
class constructorTest { public static class Bidule { public int a; public int b; public String toString() { return "("+a+", "+b+")"; } // toString } // class Bidule public static void main (String[] args) { Bidule zap = new Bidule(); System.out.println(zap); // affiche (0, 0) } }
Si je ne m'abuse, les membres de ta classe seront instanciés à leur valeur « par défaut », c.-à-d. :
– 0 pour les nombres,
– "" pour les chaînes,
– '' pour les chars,
– etc.
Si certains de tes membres sont des objets, à toi de t'assurer que les instanciations se font comme tu l'attends ;)
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
29 nov. 2009 à 16:58
29 nov. 2009 à 16:58
Mdr c'est pas ma faute si je suis fort en java, j'en bouffe tous les jours avec mes études ^^
Le rôle du new c'est juste d'instancier l'objet. S'il initialise les attributs, c'est juste par « sécurité » (en C++, par exemple, ils ne sont pas initialisés et on se retrouve avec des valeurs inattendues genre 51354823 à la place de 0).
Quand tu fais new, Java recherche un constructeur dans ta classe. S'il n'en trouve pas il se débrouille comme je l'ai dit pour initialiser les membres ; s'il en trouve un, il l'appelle.
Techniquement, new a un autre rôle : il trouve de la mémoire pour l'objet. C'est-à-dire qu'il va réserver un emplacement dans la mémoire vive pour stocker l'objet pendant tout le temps où on en aura besoin. Mais en Java, on n'a pas besoin de se soucier des histoires de mémoire, il gère tout tout seul.
Attention avec les attributs qui sont eux aussi des objets : Java ne sait pas comment les initialiser et il mettra juste null. Exemple :
Ici on voit que Truc a un constructeur, mais Java ne l'utilise pas tout seul. C'est à toi de lui dire. Et pour ça, il faut faire un new dans le constructeur de Machin :
Le rôle du new c'est juste d'instancier l'objet. S'il initialise les attributs, c'est juste par « sécurité » (en C++, par exemple, ils ne sont pas initialisés et on se retrouve avec des valeurs inattendues genre 51354823 à la place de 0).
Quand tu fais new, Java recherche un constructeur dans ta classe. S'il n'en trouve pas il se débrouille comme je l'ai dit pour initialiser les membres ; s'il en trouve un, il l'appelle.
Techniquement, new a un autre rôle : il trouve de la mémoire pour l'objet. C'est-à-dire qu'il va réserver un emplacement dans la mémoire vive pour stocker l'objet pendant tout le temps où on en aura besoin. Mais en Java, on n'a pas besoin de se soucier des histoires de mémoire, il gère tout tout seul.
Attention avec les attributs qui sont eux aussi des objets : Java ne sait pas comment les initialiser et il mettra juste null. Exemple :
class autreTest { public static class Machin { public int n; public Truc t; public Machin() { n = 2; // on n'initialise pas t } // Machin public String toString() { return "("+n+", "+t+")"; } // toString } // class Machin public static class Truc { public String s; public double x; public Truc() { s = "blabla"; x = 7.4; } // Truc public String toString() { return "["+s+", "+x+"]"; } // toString } // class Truc public static void main (String[] args) { Machin m = new Machin(); System.out.println(m); // affiche (2, null) } }
Ici on voit que Truc a un constructeur, mais Java ne l'utilise pas tout seul. C'est à toi de lui dire. Et pour ça, il faut faire un new dans le constructeur de Machin :
class autreTest { // version corrigée public static class Machin { public int n; public Truc t; public Machin() { n = 2; t = new Truc(); } // Machin public String toString() { return "("+n+", "+t+")"; } // toString } // class Machin public static class Truc { public String s; public double x; public Truc() { s = "blabla"; x = 7.4; } // Truc public String toString() { return "["+s+", "+x+"]"; } // toString } // class Truc public static void main (String[] args) { Machin m = new Machin(); System.out.println(m); // affiche (2, [blabla, 7.4]) } }
seljazou
Messages postés
175
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
25 décembre 2009
1
29 nov. 2009 à 17:28
29 nov. 2009 à 17:28
j un peu compri, je dois méditer un êu plus ce que tu as écrit. Mais dis moi, pourquoi laisse tu la fonction main à la fin?? je croyais que tout le code doit être écrit dans main.
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
663
>
seljazou
Messages postés
175
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
25 décembre 2009
29 nov. 2009 à 17:48
29 nov. 2009 à 17:48
La fonction main() c'est le point de départ du programme, et quand elle se termine c'est le programme qui se termine.
La plupart du code est ailleurs, dans d'autres fonctions de la classe ou dans d'autres classes. C'est mieux pour la lisibilité.
Regarde les deux lignes de son main(), c'est effectivement tout ce que le programme fait quand on l'exécute ;). Mais il a besoin du reste pour exécuter ça.
La plupart du code est ailleurs, dans d'autres fonctions de la classe ou dans d'autres classes. C'est mieux pour la lisibilité.
Regarde les deux lignes de son main(), c'est effectivement tout ce que le programme fait quand on l'exécute ;). Mais il a besoin du reste pour exécuter ça.
seljazou
Messages postés
175
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
25 décembre 2009
1
>
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
29 nov. 2009 à 17:52
29 nov. 2009 à 17:52
ah! c donc pour ça qu'on met les public sur les classes et les méthodes n'est ce pas? car sinon, elles ne seront pas accessible depuis la main si on les definit avant. c juste?
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
663
>
seljazou
Messages postés
175
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
25 décembre 2009
29 nov. 2009 à 17:55
29 nov. 2009 à 17:55
Oui! :)
(entre autres)
(entre autres)
seljazou
Messages postés
175
Date d'inscription
dimanche 6 septembre 2009
Statut
Membre
Dernière intervention
25 décembre 2009
1
>
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
29 nov. 2009 à 17:59
29 nov. 2009 à 17:59
merci :'(
(j'aime pas le java, trop compliqué ) mais j'ai pas le choix.
merci encore :)
(j'aime pas le java, trop compliqué ) mais j'ai pas le choix.
merci encore :)
29 nov. 2009 à 16:22
le constructeurs sert t il seulement à instancier les attributs (variables) de la classe?
Quand on instancie une classe ( on crée un objet de cette classe), le new, je croyais qu'il servait à initialiser les attributs... a t il d'autres rôles?