2013-07-18 9 views
5

Ho notato una cosa che un costruttore e un metodo semplice di una classe fanno lo stesso lavoro. qual è la ragione esatta per creare un costrutto di una classe? Se creo il costruttore MyClass(){} e il metodo MyClassMethod(){}, farà lo stesso lavoro di quando scrivo la parte del corpo di quel metodo e costruttore. Allora, qual è il bisogno di costruire? Ha qualche uso speciale?qual è il vantaggio extra di creare il costruttore in java?

+0

Ci sono molti usi di costruttore diverso funzionalità abitazioni eseguibile! – NINCOMPOOP

+0

http://www.javaworld.com/jw-10-2000/jw-1013-constructors.html – Santosh

risposta

1

Uno dei vantaggi dell'utilizzo di un costruttore su un metodo è che si può essere certi che il costruttore sia stato chiamato e che il lavoro all'interno del costruttore sia stato eseguito.

La lingua specifica che per costruire un oggetto deve essere chiamato un costruttore. Pertanto, se si utilizza un metodo personalizzato per stabilire lo stato iniziale dell'oggetto, sarà necessario prima chiamare il costruttore predefinito. Perché effettuare due chiamate di metodo quando è possibile eseguire il lavoro in una chiamata al costruttore e assicurarsi che l'oggetto sia stato inizializzato correttamente?

public class Test(){ 

    private Integer x; 

    public Test(){ 

    } 

    public Test(Integer x){ 
     this.x = x; 
    } 

    public void setX(Integer x){ 
     this.x = x; 
    } 

    public void doSomethingWithX(){ 
     this.x.toString(); 
    } 
} 

Test test = new Test(8); 
test.doSomethingWithX(); //I know x has been declared and assigned 

Test test = new Test(); 
test.doSomethingWithX(); //X has not been assigned results in NPE 
3

Se si crea un nuovo oggetto di MyClass si chiamerà automaticamente il costruttore - È possibile inizializzare tutti i membri all'interno di essa, e essere sicuri che questo object's membri sono tutti inizializzati.

generale:
Un costruttore è sempre chiamato volta quando si crea un nuovo oggetto di questa classe, e si CAN NOT chiamano manualmente.
E non fare fare il lavoro "reale" in un costruttore, poiché rallenterà la creazione di oggetti di questa classe - solo inizializzerà la classe/i membri lì.

È anche possibile utilizzare diversi costruttori, in base alle proprie esigenze, ma se si crea un costruttore, non esiste più un costruttore predefinito!

Esempio:

public MyClass { 

    int score; 

    public MyClass(int sc) { // already know the score 
    score = sc; 
    } 

    public MyClass() { // don´t know the score yet 
    score = 1; 
    } 

    public void addScore() { 
    score += 5; // i know for sure that score is not zero 
    } 

} 
4

Alcuni punti:

1) I costruttori sono l'unico modo per impostare final variabili istanza.

public class SomeType { 
    final int x ; 
    SomeType(int y){ 
    x=y; 
    } 
} 

2) Una classe con private costruttore non può essere classificato sotto.

3) Se la classe è una sottoclasse e la classe base non ha un costruttore predefinito, è necessario un costruttore della classe per chiamare il costruttore super-classe.

0

È possibile impostare i campi final senza inizializzatore in un costruttore. Questo aiuta a costruire immutable casi:

class Number extends Expr { 
    private final int n; 

    public Number(int n) { 
     this.n = n; 
    } 

    public int getValue() { 
     return this.n; 
    } 
} 

Così, dopo un costruttore come questo, si può fare affidamento sul fatto che l'istanza viene inizializzata completamente (e in questo caso, si tratta di valori sono immutabili/costante) .

2

In sostanza un costruttore è solo un metodo speciale che restituisce implicitamente un oggetto del tipo che lo contiene.In generale dovresti usare i costruttori per creare oggetti: questo è ciò che le persone si aspettano di vedere.

Tuttavia, v'è un linguaggio utile chiamato (più Info a this link) factory method che è essenzialmente utilizzando un metodo statico per costruire un oggetto, i vantaggi essendo

  • È possibile dare un metodo factory un più nome descrittivo (mentre ovviamente un costruttore standard deve essere chiamato dopo la classe contenente).
  • Non hanno hanno per restituire un oggetto, dando più flessibilità.
  • Possono restituire un sottotipo della classe.
+0

I metodi non sono chiamati 'costruttore statico' ma metodo di fabbrica. –

+0

La mia comprensione è che è stato definito come un costruttore statico se ha restituito il tipo di esso contenente la classe e un metodo factory, se non (ad esempio appartiene a una classe factory dedicata). Tuttavia un po 'googling suggerisce che il metodo factory è il nome comune in entrambi i casi, aggiornerà la mia risposta. Grazie! – robjohncox

0

Il costruttore non è un metodo semplice. Viene chiamato ogni volta che viene creato l'oggetto di quella particolare classe. Non è necessario chiamarlo esplicitamente.


Ci sono quarantina che dobbiamo fare immediatamente quando viene creato l'oggetto, per esempio quando si crea una sorta di interfaccia grafica cosa che si desidera impostare molte proprietà del momento della creazione, come le dimensioni della finestra ecc Un altro vantaggio del costruttore è la sicurezza della classe. Non è possibile creare un oggetto se non si conoscono i perimetri giusti del costruttore.


Maggiori dettagli: http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

3

un costruttore e un metodo sono due cose diverse. Il fatto che tu possa scrivere lo stesso codice o simile in loro è irrilevante.

Quando viene creato un nuovo oggetto viene chiamato un costruttore. Se non lo specifichi, il compilatore ne creerà uno predefinito. Questo è il luogo in cui avviene l'inizializzazione dei campi dell'oggetto e la memoria viene allocata per l'oggetto. Questo è un concetto che hanno tutti i linguaggi orientati agli oggetti. Un nuovo oggetto deve essere inizializzato in qualche modo. La memoria deve essere assegnata. In Java non si gestisce la memoria da soli (almeno non direttamente comunque), quindi questo è lo scopo del costruttore. Tieni presente che poiché un costruttore viene sempre eseguito, questo comportamento è applicato non appena chiami e.g. Person p = new Person();.

Ora, poiché viene sempre chiamato un costruttore, qui è disponibile un'opzione: è possibile eseguire il costruttore predefinito o crearne uno autonomamente? Forse ci sono campi che devono essere inizializzati in un modo diverso dai loro valori predefiniti. O forse non è necessario consentire la creazione di un oggetto senza fornire alcuni valori. Se si definisce un costruttore autonomamente, il compilatore non ne crea uno predefinito per l'utente. Quindi, se ho public Person(String firstName, String lastName) {} poi ho creato una regola specifica che è ancora una volta applicata dal sistema: un nuovo oggetto di classe Persona non può essere creato a meno che non si dà un nome e cognome:

Person p = new Person(); // this would give a compile error 
Person p = new Person("John", "Smith"); // this is the only way to create an object now 

Usando un metodo che è non posso far rispettare questo. Il programmatore che usa la tua classe potrebbe chiamare il tuo metodo o no. Il costruttore è una parte del ciclo di vita dell'oggetto. Metodi definiscono il comportamento dell'oggetto

0

Un costruttore è un metodo speciale di una classe o struttura in programmazione orientata agli oggetti che inizializza un oggetto di quel tipo.

Alcuni punti:

1. A constructor eliminates placing the default values. 
2. A constructor eliminates calling the normal method implicitly. 
Problemi correlati