2010-03-17 16 views
5

Io non sono un tipo Java, quindi mi chiedo che cosa questo significa:domanda java: è un metodo?

public Button(Light light) { 
     this.light = light; 
} 

è il tasto di un metodo? Mi chiedo, perché richiede un parametro di input leggero. Ma se fosse un metodo, perché dovrebbe iniziare con una lettera maiuscola e non ha alcun tipo di dati di ritorno?

Arriva l'esempio completo:

public class Button { 
    private Light light; 

    public Button(Light light) { 
    this.light = light; 
    } 

    public void press() { 
    light.turnOn(); 
    } 
} 

lo so, questa domanda è davvero banale. Tuttavia, non ho nulla a che fare con Java e non ho trovato una descrizione per la cosa Button sopra. Sono solo interessato

risposta

2

È un constructor per l'oggetto Button.

Così, quando si scrive:

Button myButton = new Button(new Light()); 

Tale metodo è quello che viene chiamato

+1

Il costruttore non è un metodo. –

3

È un constructor.

È necessario passare la luce come parametro quando si crea un'istanza della classe.

Eg

Light l = new Light(); 
Button b = new Button(l); 
b.press(); 
11

Questa è una domanda abbastanza valida.

Che cosa il vostro vederlo un metodo costruttore che hanno sostanzialmente le caratteristiche che avete appena citate:

  • Non ce l'ho tipo di ritorno (perché sta costruendo un'istanza della classe)
  • Sono dal nome della classe, in questo caso la classe è Button (la maiuscola non è nulla di speciale, ma una convenzione di codifica, le classi java devono iniziare con maiuscole, quindi il costruttore inizia con le maiuscole)

E una nota aggiuntiva sul codice pubblicato.

Se non si definisce un costruttore, il compilatore inserirà un costruttore senza argomenti per voi:

Quindi questo è valido:

public class Button { 
    // no constructor defined 
    // the compiler will create one for you with no parameters 
} 

.... later 
Button button = new Button(); // <-- Using no arguments works. 

Ma se si fornisce un altro costruttore (come in il tuo caso) non puoi più usare il costruttore no args.

public class Button(){ 
    public Button(Light l ){ 
     this.light = l;// etc 
    } 
    // etc. etc. 
} 
.... later 

Button b = new Button(); // doesn't work, you have to use the constructor that uses a Light obj 
+0

Ok, questo ha senso. Grazie a tutti per le risposte molto dettagliate. Questo mi fa amare SO. – Stefan

2

È uno dei possibili costruttori per la classe Button. Ogni istruzione che contiene il nome della classe e non ha alcun valore di ritorno è un costruttore.

È possibile definire il costruttore multipli, ad esempio per differenziare il numero e il tipo di parametri quali:

public Button(); 
public Button(int i); 
public Button(int i, int j); 
public Button(String s,int i, double d); 

e così via.

0

Button è un costruttore

0

Si tratta di un costruttore personalizzato scritto in una classe Button, che accetta parametro di input come luce variabile personalizzata. Pertanto, nella classe Button sarà avere due costruttori:

  1. default vale a dire, Button bt = new Button();
  2. Parametro cioè, Button bt = new Button(Light l) che abbiamo bisogno di passare

argomento di input durante l'inizializzazione.

+0

Il compilatore non genererà un costruttore predefinito, quindi la frase "Pertanto, nella classe' Button' si avranno due costruttori "è errata. – Tom