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

avec Java Discussion :

Pourquoi une StackOverflowError ?


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut Pourquoi une StackOverflowError ?
    Bonjour, je ne saisis pas clairement pourquoi ce bout de code renvoie une StackOverflowError. Est-ce à cause du fait qu'il y a une création d'instance dans la création d'instance de la méthode main ?


    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
     
    class Holder{
     
    	int value = 1;
    	Holder link = new Holder(8);
     
    	public Holder(int val){ 
    		this.value = val; 
    	}
     
    	public static void main(String[] args){
    		Holder a = new Holder(5);
    		System.out.println(a.value);
    	}
    }
    Merci

  2. #2
    Membre émérite Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 593
    Par défaut
    Bonjour,

    Citation Envoyé par olivier252 Voir le message
    Est-ce à cause du fait qu'il y a une création d'instance dans la création d'instance de la méthode main ?
    Bingo !

    Oui, c'est la cause du dépassement de pile. (StackOverflow)

    La méthode main va créer (en simplifiant les écritures) :
    un Holder a (avec val = 5)
    mais aussi, du coup :
    un Holder a.link (avec val = 8)
    et donc la création du "link" va entraîner la création de
    a.link.link
    et ensuite de
    a.link.link.link
    ...
    a.link.link.link............................................................................link
    Jusqu'au plantage.

    Il vaudrait mieux séparer la création du Holder link de la création du précédent Holder.

    Par exemple, après retrait de la ligne "Holder link = new Holder(8);" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void main(String[] args){
      Holder a = new Holder(5);
      Holder a.link = new Holder(8);
    
      System.out.println(a.value);
    }

  3. #3
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut
    Ah, ah ! Merci de ton aide une fois encore.

    Cela dit ton explication est bien plus nette que la mienne !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pourquoi une restriction 3 caractères identiques dans le titre ?
    Par nikalkal dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 32
    Dernier message: 29/06/2006, 12h14
  2. pourquoi une requete dure si longtemps
    Par fscli dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/06/2006, 11h58
  3. Réponses: 7
    Dernier message: 27/07/2005, 17h34
  4. Réponses: 5
    Dernier message: 07/07/2005, 10h20
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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