繁体   English   中英

没有默认构造函数的Java类

[英]Java class without default 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);
    }

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

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


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

public class Example {
    private int a = 42;

    // ...
}

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


我知道是否未声明默认构造函数,并且我的课程没有其他构造函数,Java会自动为我生成一个默认构造函数。 如果声明一些构造函数,则需要手动声明默认构造函数。

您在混淆两件事。

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

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

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

你的陈述是错误的

我知道Java会使用默认值初始化属性,但是对我来说,这仅发生在默认构造函数中。

Java也会为重载的构造函数或非默认构造函数自动使用默认值初始化属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM