2010-03-17 14 views
5

No soy un chico de Java, por lo que me pregunto lo que esto significa:pregunta java: ¿Es un método?

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

es botón de un método? Me pregunto, porque toma un parámetro de entrada de luz. Pero si se tratara de un método, ¿por qué debería comenzar con una letra mayúscula y no tiene un tipo de datos de retorno?

Aquí viene el ejemplo completo:

public class Button { 
    private Light light; 

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

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

que sé, esta pregunta es muy trivial. Sin embargo, no tengo nada que ver con Java y no he encontrado una descripción para el botón anterior. Solo estoy interesado.

Respuesta

2

Es un constructor para el objeto Button.

Así que cuando se escribe:

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

Ese método es lo que se llama

+1

El constructor no es un método. –

3

Es un constructor.

Debe pasar light como parámetro cuando crea una instancia de la clase.

Ej

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

Esa es una pregunta muy válida.

Lo que su viéndolo un constructor método que básicamente tiene las características que usted acaba de mencionar:

  • No tienen tipo de retorno (ya que es la construcción de una instancia de la clase)
  • Son nombre del nombre de la clase, en este caso la clase es Button (La mayúscula no es nada especial, pero una convención de codificación, las clases de Java deberían comenzar con mayúsculas, por lo tanto el constructor también debe comenzar con mayúsculas)

Y una nota adicional sobre su código publicado.

Si no se define un constructor, el compilador insertará un constructor sin argumentos para usted:

Así que esto es válido:

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. 

Pero si se suministra a otro constructor (como en su caso) ya no puede usar el constructor sin argumentos.

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, esto tiene sentido. Gracias a todos por las respuestas muy detalladas. Esto me hace amar SO. – Stefan

2

Es uno de los posibles constructores del botón de clase. Cada instrucción que contiene el nombre de la clase y no tiene valor devuelto es un constructor.

Se pueden definir múltiples constructor, por ejemplo para diferenciar el número y tipo de parámetros tales:

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

y así sucesivamente.

0

Button es un constructor

0

Es un constructor de encargo por escrito en una clase Button, que acepta parámetro de entrada como una luz variable personalizada. Por lo tanto, en la clase Button va a tener dos constructores:

  1. por defecto, es decir, Button bt = new Button();
  2. de parámetros, es decir, Button bt = new Button(Light l), que necesitamos pasar

argumento de entrada durante la inicialización.

+0

El compilador no generará un constructor predeterminado, por lo que su oración "Por lo tanto, en la clase' Button' tendrá dos constructores "es incorrecta. – Tom