2013-02-06 12 views
22

Dopo aver inserito il post su questo argomento, ho trovato il mio io poco confuso. Quindi chiedendo ancora questocosa restituisce un costruttore in java

"Il costruttore java restituisce alcun valore?"

I libri dicono che non possono restituire un valore ma il professore dice che possono farlo e lo fanno sempre? Poiché il controllo deve essere trasferito a qualcuno con qualche valore o vuoto?

+3

Forse il tuo professore voleva dire restituire una nuova istanza? –

+0

Può essere utile: http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5 – kosa

risposta

7

Un costruttore restituisce una nuova istanza della classe a cui appartiene, anche se non ha un'istruzione di ritorno esplicita.

+0

costruttore se non restituisce nulla, quindi perché viene utilizzato all'interno di ogni costruttore compilatore implicitamente per restituirlo. –

27

Questo è un po 'di confusione: i costruttori in effetti non restituiscono un valore; è l'operatore new che lo fa. Tuttavia, i costruttori vengono sempre utilizzati con uno * restituire un valore.


* Questa è una lieve semplificazione: è possibile utilizzare un costruttore senza new se si passa attraverso riflessione. Tuttavia, gli stessi meccanismi saranno in gioco.

+1

new è solo una parola chiave, quindi come può restituire un valore? –

+10

@shivdhwajpndey Non ho detto che la parola chiave 'new' restituisce un valore: ho detto che l'operatore' new' * * fa. Parole chiave e caratteri speciali sono elementi di sintassi; non fanno nulla Sono gli operatori che rappresentano quello che fanno. La parola chiave 'new' di per sé è priva di significato come' + 'o' -' lasciati da soli. Hanno bisogno di operandi. Proprio come un unario meno un prende un operando che deve essere un numero, l'operatore 'new' prende un operando che deve essere un costruttore. Operator 'new' si occupa di allocare la memoria, chiamare il costruttore, passargli i parametri richiesti e restituire il valore. – dasblinkenlight

+1

Risposta eccellente –

6

Penso che la confusione sia puramente notazionale. Quando si dichiara un costruttore, lo si fa in questo modo:

public class Foo { 
    public Foo() {} 
} 

Qui, non c'è alcun valore di ritorno esplicito.

Tuttavia, quando si crea un'istanza di un oggetto, la sintassi è la seguente:

Foo foo = new Foo(); 

Questo crea un nuovo oggetto per l'allocazione di memoria e chiamando il costruttore. Qui, il risultato è chiaramente un'istanza di Foo.

Un modo per riconciliare la notazione apparentemente in conflitto consiste nel pensare a un costruttore che restituisce l'oggetto che viene costruito, ma in modo implicito.

+0

Ma il compilatore dice altro quando controllato dice che questo sta tornando dal costruttore –

+0

@shivdhwajpandey "questo" è l'oggetto che si sta costruendo. Il costruttore – 2rs2ts

1

Sono d'accordo con sopra due spiegazioni, e si desidera aggiungere alcune dichiarazioni per rendere più chiaro:

Domanda: Che cosa è un costruttore: Risposte: E 'un metodo avente nome stesso di classe.

Domanda: Il costruttore restituisce qualcosa? Risposta: No, nemmeno VUOTO.

Domanda: Come chiamare un costruttore? O come viene chiamato un costruttore? Risposte: creando un oggetto usando la parola chiave NEW.

Domanda: come creare un oggetto? Risposta: Un modo per creare oggetti è utilizzare l'operatore NEW, che restituisce un'istanza dell'oggetto.

+0

se non restituisce nulla, quindi perché questo viene utilizzato all'interno di ogni costruttore dal compilatore implicitamente per restituirlo. –

-2

implicitamente costruttore di restituire il tipo di classe ........

0

Per definizione non v'è alcuna possibilità di ritornare un valore da un costruttore.Un costruttore non supporta alcun tipo di reso

3

I costruttori sono METODI SPECIALI. Beh, la differenza di base nei costruttori e metodi è che

Constructor

  • avere lo stesso nome di quella della classe
  • non ha un tipo di ritorno
  • può essere sovraccaricato, ma non ignorata.

mentre

Metodi

  • possono o non possono avere lo stesso nome di quella della classe.
  • hanno restituito il tipo
  • Può essere sovraccaricato e sottoposto a override.

Sintassi Per Metodi:
AccessModifier ReturnType Class (...)
EG: void main (String [] args) public static

sintassi per Costruttori:
AccessModifier No ReturnType Class (...)
EG: Main (string [] args) pubblici statici

Si prega di notare:

Java è un linguaggio fortemente tipizzato, in modo che ogni funzione ha il suo tipo di ritorno, e costruttore restituisce sempre un'istanza della classe.

0

Immagina di trovarti in una situazione in cui ti viene detto di disegnare un'Aquila.

Primo scenario: non ti viene detto come dovrebbe apparire. Tutto quello che sai è quello di rendere un semplice schizzo di un secondo scenario Aquila

: Stai per essere detto esattamente ciò che i colori da usare e la postura in cui Eagle è da abbozzato

Ora il primo scenario descrive esattamente ciò che un il costruttore predefinito fa e il secondo scenario è quando si hanno informazioni su COME deve essere creato l'oggetto. Ma fino a quando, a meno che non prendi carta e matita e inizi a disegnare, non ti verrà restituito nulla.

Così quando si chiama il costruttore usando una nuova parola chiave si ottiene un oggetto. Sebbene non restituisca esplicitamente qualcosa ma invece crea o costruisce qualcosa che puoi usare come istanza di una classe.

0

sì, è l'istanza di classe corrente. (Non possiamo usare il tipo di reso ma restituisce un valore).

0

Il costruttore restituisce la struttura dettagliata della classe a un livello molto inferiore (come la quantità di spazio di memoria da utilizzare per dati e metodi) + esegue il codice scritto all'interno del costruttore. Mentre il nuovo operatore accetta, restituisce il costruttore, come suo operando e alloca la memoria in fase di esecuzione e restituisce il gestore alla variabile di classe.

1

così, lontano sono preoccupazione costruttore restituire l'id riferimento per fare riferimento a variabile di tale classe. fare un esempio:

class demo 
{ 
demo{} 
} 
class demo1 
{ 
public static void main(String as[]) 
{ 
demo d = new demo(); 
System.out.println(d); 
} 
} 

uscita: demo @ 7d4991ad è l'id riferimento dell'oggetto 'd' di classe demo che viene restituita dal costruttore. se non definirai il tuo costruttore, jvm otterrà questo id dal costruttore predefinito.

è possibile verificare tramite questa linea: System.out.println (nuova demo()); output: demo @ 1b6d3586. poiché ogni oggetto ha la sua area heap separata in memoria, quindi anche l'id di riferimento di ciascun oggetto varia.

+1

Era così difficile rielaborare il codice un po 'per renderlo leggibile? –

Problemi correlati