没有默认构造函数

时间:2017-03-18 13:54:21

标签: java constructor

我知道如果没有声明默认构造函数并且我的类没有任何其他构造函数,Java会自动为我生成默认构造函数。 如果我声明一些构造函数,我需要手动声明默认构造函数。

为什么这个案例 lac4 包含未在构造函数中启动的属性中的默认值,而我没有默认构造函数(“ataque”,“vidaAtual”和“vidaMaxima”包含0)?我知道Java使用默认值初始化属性,但对于我来说,这只发生在默认构造函数中。

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

}

我的主要

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);
    }

2 个答案:

答案 0 :(得分:5)

  

...但是对于我来说,这只发生在默认构造函数中。

不,在创建实例之前,在调用 任何 构造函数之前会发生这种情况。

只是FWIW,如果您在这些字段上有初始化程序,例如:

public class Example {
    private int a = 42;

    // ...
}

...设置这些初始值设定项的代码将被编译器自动插入到类中每个构造函数的开头。

  

我知道如果没有声明默认构造函数并且我的类没有任何其他构造函数,Java会自动为我生成默认构造函数。如果我声明一些构造函数,我需要手动声明默认构造函数。

你混淆了两件事。

默认构造函数是编译器为您生成的构造函数,如果您不提供任何构造函数。

零参数构造函数是一个不接受任何参数的构造函数。

默认构造函数是零参数构造函数。如果显式提供零参数构造函数,则它不是默认构造函数。 “默认”仅表示:默认,如果没有其他提供。

答案 1 :(得分:0)

你的陈述错了

  

我知道Java使用默认值初始化属性,但对于我的   这只发生在默认构造函数中。

Java也会为重载的构造函数或非默认构造函数

使用默认值自动初始化属性