- Uma classe deve sempre ter um construtor
- Se sua classe não possui nenhum construtor, o compilador cria um construtor vazio implicitamente; porém, se você definir um construtor o compilador não faz mais essa criação implícita. Isso quer dizer que se você implementar um construtor com parâmetros, mas quiser que ainda exista um sem parâmetros, você deve implementa-lo.
- Um construtor pode invocar outro construtor para reutilizar sua lógica
- a chamada para o outro construtor deve ficar na primeira linha (gera erro de compilação)
- o compilador garante que não ocorra um loop de invocações de construtor
public Product(String name, double price) {
this(name); //
this.price = BigDecimal.valueOf(price);
}
public Product(String name) {
this.name = name;
this.price = BigDecimal.ZERO;
}
- Existe ainda o Instance Initializer que é um bloco de código executado antes de qualquer construtor
private static int maxId;
private final int id;
static {
maxId = 0;
}
{
id = ++maxId;
}