Construtores em Java – Parte II

Por
2 min. de leitura

Fala, meus consagrados! Beleza?

No artigo anterior sobre a parte I dos construtores, falamos sobre esse método especial em uma classe Java. Os construtores em Java são usados para inicializar objetos de uma classe. Eles possuem o mesmo nome da classe e são chamados automaticamente quando um objeto é criado, garantindo que as variáveis de instância sejam configuradas com valores padrão ou específicos fornecidos pelo desenvolvedor. Vamos finalizar neste artigo o estudo sobre construtores.

Um construtor pode chamar outros construtores:

public class Pessoa {

private String nome;

private String sobrenome;

public Pessoa(String nome) {

this.nome = nome;

}

public Pessoa(String nome, String sobrenome) {

this(nome);

this.sobrenome = sobrenome;

}

}

A classe possui dois construtores sobrecarregados, sendo que o segundo construtor chama o primeiro. Vamos entender cada construtor.

Construtor com um parâmetro:

public Pessoa(String nome) {

this.nome = nome;

}

Este construtor aceita um único parâmetro do tipo String, chamado nome. Esse parâmetro é utilizado para inicializar o atributo nome da classe.

Quando um objeto da classe Pessoa é criado com um único argumento String, este construtor é invocado, como em new Pessoa(“Kal-El Gildo”). O atributo sobrenome não é inicializado neste construtor e permanecerá null se não for definido posteriormente:

Pessoa kalel = new Pessoa(“Kal-El Gildo”);

Construtor com dois parâmetros:

public Pessoa(String nome, String sobrenome) {

this(nome);

this.sobrenome = sobrenome;

}

Esta segunda versão de construtor aceita dois parâmetros do tipo String: nome e sobrenome. A primeira linha dentro deste construtor é uma chamada ao construtor de um parâmetro da própria classe. Isso é feito através de this(nome), que passa o parâmetro nome para o outro construtor. Isso permite reutilizar a inicialização do atributo nome sem replicar código.

Após a chamada ao outro construtor, o atributo sobrenome é inicializado com o valor do parâmetro sobrenome. Quando um objeto da classe Pessoa é criado com dois argumentos String, este construtor é utilizado, como em new Pessoa(“Kal-El Gildo”, “Araújo”). Aqui, nome é inicializado como “Kal-El Gildo” (usando o primeiro construtor através da chamada this(nome)) e sobrenome é inicializado como “Araújo” (na linha seguinte dentro do mesmo construtor).

A sobrecarga dos construtores permite que um objeto seja inicializado de diferentes maneiras, oferecendo flexibilidade na criação de instâncias da classe Pessoa. Ao chamar outro construtor com this(), estamos aplicando o princípio DRY (Don’t Repeat Yourself), evitando duplicação de código e tornando o código mais fácil de manter e entender.

Quando um método em Java tem o mesmo nome da classe e um tipo de retorno, ele não será tratado como um construtor, mas sim como um método comum. Isso ocorre porque um construtor não pode ter um tipo de retorno (nem mesmo void) e a presença de um valor de retorno invalida sua qualificação como construtor.

O compilador Java não trata o método como um construtor, pois um construtor não pode ter um tipo de retorno.

Caso a classe não tenha um construtor válido, o compilador gerará um construtor padrão implícito (um construtor sem argumentos e sem corpo).

O método será tratado como um método regular que precisa ser chamado explicitamente, e não será executado automaticamente na criação do objeto.

Exemplo:

public class Exemplo {

public int Exemplo() {

System.out.println(“Método com o mesmo nome da classe”);

return 42;

}

public static void main(String[] args) {

// O construtor padrão será chamado.

Exemplo x = new Exemplo(); 

// O método é chamado explicitamente.

int valor = x.Exemplo();   

System.out.println(“Valor retornado: ” + valor);

}

}

O método public int Exemplo() não é um construtor porque possui o tipo de retorno int.

O compilador cria automaticamente um construtor padrão para a classe Exemplo, que será chamado na linha new Exemplo().

O método Exemplo() é um método comum que precisa ser chamado explicitamente, como feito na linha x.Exemplo().

Resultado da execução:

Valor retornado: 42

Espero que tenham gostado! 

Forte abraço e até a próxima jornada!

Por
2 min. de leitura