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
Bonjour,

j'aimerai savoir si on est obligé de definir les constructeurs en JAVA AVANT de créer un objet.

merci :)
A voir également:

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
Salut,
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 ;)
2
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 à 16:22
T foooort en Java :D.. moi je suis debutante :(

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?
0
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
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 :

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])
	}

}
2
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
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.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > 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
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.
0
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
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?
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > 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
Oui! :)

(entre autres)
0
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
merci :'(

(j'aime pas le java, trop compliqué ) mais j'ai pas le choix.

merci encore :)
0