2016-07-20 13 views
0

Hier ist ein Code ohne param KonstruktorNo Param und Standardkonstruktoren Verwirrung

public class misc2 { 


    misc2(String x){ 

    } 

    public static void main(String ... args){ 

     misc2 m = new misc2(); // this throws a compilation error 

    } 
} 

Meine Frage ist warum es einen Übersetzungsfehler werfen, wenn Java automatisch ein Standard-Konstruktor erstellt, in diesem Fall MISC2() { ...}. wenn es nicht bereits definiert ist.

Auch jetzt, wenn ich einen No-Param-Konstruktor misc2() {...} hinzufügen, die tatsächlich von der JVM aufgerufen wird. Ist es der Standardparameter oder der Nein-Parameter? Die zweite Frage ist, dass, wenn Java bereits einen Standardkonstruktor ohne Parameter erstellt, die Notwendigkeit besteht, in einigen Fällen im Java-Programm explizit einen Konstruktor zu erstellen.

Antwort

1

Java erstellt einen Standardkonstruktor wenn und nur wenn kein anderer expliziter Konstruktor bereitgestellt wird.

Aus der Dokumentation:

You don't have to provide any constructors for your class, but you must be careful when doing this. The compiler automatically provides a no-argument, default constructor for any class without constructors.

See: https://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

Okay, auch, da Java eine IFF Standardkonstruktor erstellt es keine definiert ist, warum dann nicht derjenige mit params definiert einen Fehler aus, , weil wir, wie in dem Code, in diesem Fall keinen Konstruktor definiert haben, also muss Java ein Standard-itrelf erstellen und keinen Fehler werfen. Ich meine Standard und parametrisiert sind völlig getrennt. Warum dann das Verhalten? –

+0

@BishwaroopChakraborty Ihr Fehler tritt auf, weil Sie versuchen, die Klasse mit Nicht-Argumenten zu konstruieren. 'new misc2()' hat keine Argumente, aber da Sie einen Konstruktor definiert haben, der eine 'String' übernimmt, müssen Sie diese verwenden. Etwas wie 'new misc2 (" hallo ") wird funktionieren. Sie können auch Ihren eigenen Konstruktor ohne Argumente definieren, wenn Sie möchten. – Kon