没有默认构造函数的Java类

Dan*_*ais -1 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
Run Code Online (Sandbox Code Playgroud)

}

我的主要

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);
    }
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

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

不,这是在创建实例之前,在调用任何构造函数之前发生的.


只是FWIW,如果你在这些领域有初始化者,例如:

public class Example {
    private int a = 42;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

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


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

你混淆了两件事.

默认构造函数是构造函数,编译器会为你,如果你不提供任何构造函数.

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

默认构造函数是零参数构造函数.如果显式提供零参数构造函数,则它不是默认构造函数."默认"意味着:默认情况下,如果没有其他提供.