2017-03-18 8 views
0

Ich weiß, wenn der Standardkonstruktor nicht deklariert ist und meine Klasse keinen anderen Konstruktor hat, erzeugt Java automatisch einen Standardkonstruktor für mich. Wenn ich einen Konstruktor deklariere, muss ich den Standardkonstruktor manuell deklarieren.Java-Klasse ohne Standardkonstruktor

Warum ist dieser Fall lac4 Standardwerte in Attribute enthält, die nicht in Konstruktor initilized worden sind, und ich habe nicht Standardkonstruktors („ataque“, „vidaAtual“ und „vidaMaxima“ enthält 0)? Ich weiß, dass Java Attribute mit Standardwerten initialisiert, aber für mich geschieht dies nur im Standardkonstruktor.

public class CartaLacaio { 

    private int ID; 
    private String nome; 
    private int ataque; 
    private int vidaAtual; 
    private int vidaMaxima; 
    private int custoMana; 

    public CartaLacaio(int ID, String nome, int ataque, int vida, int mana) { 
     this.ID = ID; 
     this.nome = nome; 
     this.ataque = ataque; 
     this.vidaAtual = vida; 
     this.vidaMaxima = vida; 
     this.custoMana = mana; 
    } 

    public CartaLacaio(int ID, String nome, int custoMana){ 
     this.ID = ID; 
     this.nome = nome; 
     this.custoMana = custoMana; 
    } 

    public CartaLacaio(CartaLacaio origem){ 

    } 

    //Getters and setters 

}

Mein Haupt

public static void main(String[] args) { 
     CartaLacaio lac1 = new CartaLacaio(1, "Frodo Bolseiro", 2, 1, 1); 
     CartaLacaio lac2 = new CartaLacaio(2, "Aragorn", 5, 7, 6); 
     CartaLacaio lac3 = new CartaLacaio(3, "Legolas", 8, 4, 6); 
     CartaLacaio lac4 = new CartaLacaio(4, "Teste nome", 3); 
    } 
+3

'„Wenn ich etwas Konstruktor deklarieren, muss ich manuell den Standard-Konstruktor deklarieren.“' - in der nicht wahr Allgemeinsinn. Sie müssen dies nur deklarieren, wenn Ihr Programm es aus irgendeinem Grund benötigt. –

+0

"Warum enthält dieser Fall lac4 Standardwerte in Attributen, die im Konstruktor nicht initialisiert wurden und ich keinen Standardkonstruktor habe (" ataque "," vidaAtual "und" vidaMaxima "enthält 0)?" Java initialisiert Instanz- und Klassenvariablen auf Standardwerte (0 für Integer-Typen, 0.0 für Fließkommawerte, False für Boolean und Null für Referenzen). –

Antwort

5

... aber für meine dies geschieht nur in den Standard-Konstruktor.

Nein, kommt vor, dass, wenn die Instanz erstellt wird, bevor jeder Konstruktor aufgerufen wird.


Nur FWIW, wenn Sie initializers auf diesen Gebieten hatten, zum Beispiel:

public class Example { 
    private int a = 42; 

    // ... 
} 

... der Code diese initializers einstellen würde in der Klasse automatisch in die zu Beginn eines jeden Konstruktor eingefügt werden, indem der Compiler.


Ich weiß, wenn Standardkonstruktor nicht deklariert und meine Klasse hat keinen anderen Konstruktor Java automatisch für mich einen Standardkonstruktor erzeugt. Wenn ich einen Konstruktor deklariere, muss ich den Standardkonstruktor manuell deklarieren.

Sie verwechseln zwei verschiedene Dinge.

Der Standardkonstruktor ist der Konstruktor, den der Compiler für Sie generieren wird, wenn Sie keine Konstruktoren bereitstellen.

Ein Zero-Parameter-Konstruktor ist ein Konstruktor, der keine Parameter akzeptiert.

Der Standardkonstruktor ist ein Zero-Parameter-Konstruktor. Wenn Sie einen Zero-Parameter-Konstruktor explizit angeben, handelt es sich nicht um einen Standardkonstruktor. "Standard" bedeutet genau das: Die Standard, wenn keine andere zur Verfügung gestellt wird.

0

Sie sind falsch in Ihrer Erklärung

Ich weiß, dass Java Attribute mit Standardwerten initialisiert aber für meine dies geschieht nur in den Standard-Konstruktor.

Java initialisiert automatisch Attribute mit Standardwerten auch für überladenen Konstruktor oder einem Nicht-Standard-Konstruktor

Verwandte Themen