2016-08-19 1 views
2

Bitte sagen Sie mir Parameter benötigt, wenn ich das richtige Verständnis des folgenden Codes haben:den Standardkonstruktor (in Java) in einer Klasse aufrufen, die nur einen definierten Konstruktor hat die

public class Test { 
    public static void main(String[] args) { 
    A a = new A(); 
    a.print(); 
    } 
} 

class A { 
    String s; 

    A(String s) { 
    this.s = s; 
    } 

    void print() { 
    System.out.println(s); 
    } 
} 

Die Zeile „A a = new A(); "ruft die Klasse/den Konstruktor auf, um ein neues Objekt mit der Referenzvariablen" a "zu erzeugen. Klasse A hat einen definierten Konstruktor, der ein Zeichenfolgenargument benötigt, daher hat er nicht den Standardkonstruktor. Dies bedeutet, dass die Instanziierung ohne Zeichenfolgenargumente einen Compilerfehler verursacht.

Wenn ich ein String-Argument in die Instanziierung einfügen würde, z. A a = neu A ("Goldfisch"); Das Programm würde kompilieren und ausführen.

Ich bin mir nicht sicher, ob ich das richtige Vokabular dafür verwendet habe, also können Sie alles korrigieren, was ungenau/verwirrend ist. Vielen Dank!

+0

Ein Standardkonstruktor wird nur in einer Klasse ohne Konstruktoren erstellt. –

Antwort

1

Ihr Verständnis ist ziemlich richtig. Die einzige Sache, die ich ändern würde, ist "create a new object" um "eine neue Instanz von A zu erstellen" mit einem Verweis auf eine java.lang.String in Parameter s. In diesem Fall weist der Konstruktor diesen Parameter einem Feld zu, kann aber etwas anderes damit tun (zum Beispiel, um einen anderen Wert für ein Feld zu berechnen).

+0

Das Erstellen eines neuen Objekts vom Typ 'a' ist das Gleiche wie das Ausgeben einer neuen Instanz von 'a' AFAIK, obwohl ich in Java (wo sie fast immer Klassenobjekte als Objekte bezeichnen) das erste bevorzugen würde. Eine andere Sache, was genau meinst du mit * 'Referenzwert a als Parameter' * – Li357

+0

@AndrewL. Die letztere Terminologie wurde korrigiert; es war schlecht formuliert. – hexafraction

+0

'a' ist kein Parameter, es ist ein Verweis auf ein Objekt im Speicher. – Li357

1

Was Sie geschrieben haben, ist ungefähr richtig.

Um genauer zu sein: "ruft die Klasse/Konstruktor" ist nicht ganz richtig. A a = new A();beabsichtigt, um den Konstruktor aufzurufen (das Aufrufen einer Klasse bedeutet nichts).

Obwohl Konstrukteure diese Methoden nicht sind, können Sie an sie denken ein bisschen wie Methoden: Wenn Ihre Klasse eine Methode, wie so definiert:

public void myMethod(String s) { ... } 

Dann myMethod() ohne Argument fehlschlagen würde zu nennen versuchen. Es ist das gleiche hier.

Verwandte Themen