簡體   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