Confusione di costruttori Java? [chiuso]

0
public class example 
{
    private String one;
    private String two;
    public example(String one, String two)
    {
        this.one = one;
        this.two = two;
    }

    public static void main(String[] args)
    {
        System.out.println(returning());
    }

    public static example returning()
    {
        return new example("yes", "no");
    }

    public String toString()
    {
        return one + " SPACESPACESPACE " + two;
    }
}

run:
yes SPACESPACESPACE no
BUILD SUCCESSFUL (total time: 3 seconds)

Stavo cercando di capire come funzionano i costruttori, e ho scritto un codice che aveva un metodo toString . Ho chiamato System.out.print sulla funzione returning() e ha stampato "yes SPACESPACESPACE no", che si trova solo nel metodo toString . Tuttavia, non ho mai avuto un oggetto per il metodo toString su cui agire (vale a dire objectCreatedFromClass.toString() ), quindi non ho mai utilizzato il metodo toString .

Qualcuno può spiegarmi perché è successo? Perché mi è stato concesso di restituire un nuovo oggetto, ovvero return new example("yes", "no") quando la mia classe è un metodo statico?

    
posta gordon sung 15.03.2016 - 23:09
fonte

3 risposte

6

println segue la convenzione e chiama toString() dell'oggetto quando è necessario, per ottenere una stringa da una classe di cui non sa nulla.

L'implementazione predefinita di Object.toString() ti dà getClass().getName() + '@' + Integer.toHexString(hashCode()) , ma hai sovrascritto la tua versione. Stai visualizzando i risultati di quella versione.

    
risposta data 16.03.2016 - 00:26
fonte
3

Why was I allowed to return a new object, namely return new example("yes", "no") when my class is a static method?

I costruttori possono essere chiamati da qualsiasi cosa li conosca (tramite import foo.bar.MyClass; o parte dello stesso file), e ha accesso ad essi ( public o stessa classe). Poiché returning() fa parte della tua classe example , può chiamare i suoi costruttori.

Nota che se i metodi statici potrebbero non chiamare costruttori, saremmo nei guai. Il primo metodo eseguito in un programma Java è main() , che è statico. Se main() non può chiamare costruttori, non possiamo mai costruire qualsiasi oggetto.

    
risposta data 16.03.2016 - 16:04
fonte
0

Puoi cancellare il tuo metodo di restituzione. E crea ed esempio oggetto nel metodo principale:  esempio n1 = nuovo esempio ("sì", "no");  System.out.println (n1);

Supponiamo di funzionare! Quindi se non si scrive un metodo su Stringhe qui il proprio sistema stamperà solo l'indirizzo in cui si trova il proprio archivio oggetti. Ma se fai un metodo, stamperà la tua stringa.

Sarà meglio se scriverai il tuo appaltatore e il metodo principale in classi diverse, renderà il tuo codice chiaro:):)

    
risposta data 16.03.2016 - 21:56
fonte

Leggi altre domande sui tag