2010-03-17 5 views
5

Ich bin kein Java-Typ, so frage ich mich, was das bedeutet:Java-Frage: Ist es eine Methode?

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

Ist-Taste ein Verfahren? Frage ich mich, weil es einen Eingangsparameter Licht braucht. Aber wenn es eine Methode war, warum sollte sie mit einem Großbuchstaben beginnen und hat keinen Rückgabedatentyp?

Hier kommt die volle Beispiel:

public class Button { 
    private Light light; 

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

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

Ich weiß, diese Frage wirklich trivial ist. Ich habe jedoch nichts mit Java zu tun und habe keine Beschreibung für die Button-Sache oben gefunden. Ich bin nur interessiert.

Antwort

2

Es ist ein constructor für das Button-Objekt. So

, wenn Sie schreiben:

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

Diese Methode ist das, was

+1

Der Konstruktor ist keine Methode. –

3

Es ist ein constructor.

Sie müssen Licht als Parameter übergeben, wenn Sie eine Instanz der Klasse erstellen.

Eg

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

Das ist eine ziemlich berechtigte Frage ist.

Was ist Ihr es eine Methode Konstruktor zu sehen, die im Grunde die Eigenschaften haben, die Sie gerade erwähnt haben:

  • nicht Rückgabetyp Sie haben (weil es eine Instanz der Klasse errichtet)
  • Sie sind benannt nach dem Klassennamen, in diesem Fall ist die Klasse Button (Der Großbuchstabe ist nichts besonderes, aber eine Kodierungskonvention, Java-Klassen sollten mit Großbuchstaben beginnen, daher beginnt der Konstruktor auch mit Großbuchstaben)

Und zusätzliche Anmerkung über Ihren geposteten Code.

Wenn Sie keinen Konstruktor definieren, fügt der Compiler eine Nein-Argumente Konstruktor für Sie:

Das ist also gültig:

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. 

Aber wenn Sie liefern einen anderen Konstruktor (wie in In Ihrem Fall können Sie den Konstruktor no args nicht mehr verwenden.

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, das macht Sinn. Vielen Dank für die sehr detaillierten Antworten. Das macht mich SO lieben. – Stefan

2

Es ist einer der möglichen Konstruktor für die Klasse Button. Jede Anweisung, die den Namen der Klasse enthält und keinen Rückgabewert hat, ist ein Konstruktor.

können mehrere Konstruktor definieren, zum Beispiel für die Anzahl und Art von Parametern wie zum Differenzieren:

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

und so weiter.

0

Knopf ist ein Konstruktor

0

Es ist ein Brauch Konstruktor in einer Button-Klasse geschrieben, der Eingabeparameter als Licht benutzerdefinierten Variable akzeptiert. Daher wird in der Button Klasse werden Sie zwei Konstruktoren werden mit:

  1. Standard heißt Button bt = new Button();
  2. Parameter heißt Button bt = new Button(Light l) die wir

Eingabeargument bei der Initialisierung übergeben müssen.

+0

Der Compiler wird keinen Standardkonstruktor generieren, daher ist der Satz "Daher ist in der Klasse' Button' zwei Konstruktoren vorhanden "falsch. – Tom

Verwandte Themen