Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Lanciando una funzione che a sua volta ne chiama un'altra e viceversa,non va in loop?

    Tra gli esempi dellla guida java proposta sul sito, mi sono imbattuto in questo

    Codice PHP:
    class persone
    {
      
    // Proprietà
      
    public int annodinascita;
      public 
    String Cognome=new String();

      
    // Costruttori
      
    public persone(int annonascita)
      {
        
    this("Non Conosco"); //<----
        
    this.annodinascita annonascita;
      }

      public 
    persone(String Cognome)
      {
        
    this(0); //<---
        
    this.Cognome Cognome;
      }
      
      public 
    persone(int annonascita String Cognome)
      {
        
    annodinascita annonascita;
        
    this.Cognome Cognome;
      }
      
      
    // Metodo che calcola l'età del soggetto
      
    public int calcolaeta (int annoattuale)
      {
        return (
    annoattuale annodinascita);
      }

    Ora facciamo che io istanzio un oggetto in questo modo
    persone Pietro = new persone(1974);

    il costruttore mi lancia la funzione public persone(int annonascita) che a sua volta rimanda alla funzione public persone(String Cognome) (tramite il this("Non conosco") ) , che a sua volta rimanda nuovamente alla funzione public persone(int annonascita) (tramite il this("0") ) e così via.

    Non si genera in questo modo un loop infinito? E se no, perchè?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Lanciando una funzione che a sua volta ne chiama un'altra e viceversa,non va in loop?

    Originariamente inviato da American
    Non si genera in questo modo un loop infinito?
    "infinito" in teoria.

    Originariamente inviato da American
    E se no, perchè?
    Ogni invocazione dei due this(.....) (come per qualunque altro metodo) fa creare un nuovo stack-frame sull'area di stack. Siccome ci sono limiti imposti e la memoria non è comunque infinita ..... ad un certo punto il tuo programma si schianterà con un bel StackOverflowError.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Re: Re: Lanciando una funzione che a sua volta ne chiama un'altra e viceversa,non va in loop?

    Originariamente inviato da andbin
    "infinito" in teoria.

    Ogni invocazione dei due this(.....) (come per qualunque altro metodo) fa creare un nuovo stack-frame sull'area di stack. Siccome ci sono limiti imposti e la memoria non è comunque infinita ..... ad un certo punto il tuo programma si schianterà con un bel StackOverflowError.
    ah ok, ma comunque di per sé l'esempio è inesatto dunque, voglio dire, in questo modo il programma non funziona giusto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Lanciando una funzione che a sua volta ne chiama un'altra e viceversa,non va in loop?

    Originariamente inviato da American
    ah ok, ma comunque di per sé l'esempio è inesatto dunque, voglio dire, in questo modo il programma non funziona giusto?
    No, infatti non funziona (e non ha senso).

    Tra l'altro, una cosa che non ricordavo, il compilatore javac in questo caso con i costruttori, è abbastanza astuto da segnalarti subito un "error: recursive constructor invocation".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    cavolo, ma allora devo fidarmi della guida o no?

  6. #6
    Perché è scritto nella guida?
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  7. #7

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da American
    si qua
    http://www.html.it/pag/15097/introdu...mmazione-java/
    Non ho letto tutta quella guida ma quella classe persone, per come è stata pubblicata lì, è palesemente errata e non compila nemmeno in base a quanto ho già detto.

    Se il secondo costruttore lo fai diventare:
    codice:
      public persone(String Cognome)
      {
        this(0, Cognome);
      }
    Compila e dovrebbe risultare corretto.

    Anzi, in linea di massima anche il primo costruttore dovrebbe invocare, preferibilmente, il terzo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da American
    si qua
    http://www.html.it/pag/15097/introdu...mmazione-java/


    Se la guida è tutta come questa pagina beh, cambia guida
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    no vabbè spesse volte questi articoli sono scritti per hobby senza nemmeno dietro retribuzione, quindi apprezziamo l'impegno

    Più che altro avete qualche link che spieghi bene come entrare nella logica della programmazione ad oggetti tramite esempi concreti di creazioni di classi e packages? Perchè alla fine è questo quello che cerco

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.