Como criar construtores em Java
UMA construtor
é um bloco de código que é chamado quando uma instância de um objeto é criado no Java. Em muitos aspectos, um construtor é semelhante a um método, mas existem algumas diferenças:Um construtor não tem um tipo de retorno.
O nome do construtor tem de ser o mesmo que o nome da classe.
Ao contrário dos métodos, os construtores não são considerados membros de uma classe. (Isso é importante apenas quando se trata de herança.)
Um construtor é chamado quando uma nova instância de um objeto é criado. Na verdade, é a nova palavra-chave que chama o construtor. Depois de criar o objeto, você não pode chamar o construtor novamente.
Aqui é o formato básico para a codificação de um construtor:
público Nome da classe (parâmetro-lista) [Lança exceção...] {declarações ...}
A palavra-chave pública indica que outras classes podem acessar o construtor. Isso é geralmente o que você quer, mas você pode querer criar um construtor privado. Nome da classe deve ser o mesmo que o nome da classe que contém o construtor. Você codificar a lista de parâmetros da mesma maneira que você codificá-lo para um método.
Observe também que um construtor pode lançar exceções se encontra situações que não pode recuperar.
Criando construtores básicos
Provavelmente, a razão mais comum para a codificação de um construtor é fornecer valores iniciais para os campos de classe quando você cria o objeto. Suponha que você tem uma classe ator chamado que tem campos nomeados nome e sobrenome. Você pode criar um construtor para a classe Actor:
Ator pública (String primeira, String passado) {firstName = first-lastName = de último}
Em seguida, você cria uma instância da classe Actor chamando esse construtor:
Ator a = new Ator ( "Arnold", "Schwarzenegger") -
Um novo objeto Ator por Arnold Schwarzenegger é criado.
Como métodos, os construtores podem ser sobrecarregados. Em outras palavras, você pode fornecer mais do que um construtor de uma classe, desde que cada construtor tem uma única assinatura. Aqui está um outro construtor para a classe Actor:
Ator pública (String primeira, String passado, boolean bom) {firstName = first-lastName = última goodActor = bom-}
Esse construtor permite que você crie um objeto Ator com informações além do nome do ator:
Ator a = new Ator ( "Arnold", "Schwarzenegger", false) -
Criando construtores padrão
Cada classe tem direito a um construtor. Se você não fornecer um construtor, Java nomeia um para você, gratuitamente. Este construtor livre é chamado de construtor padrão. Ele não aceita nenhum parâmetro e não faz nada, mas permite a sua classe a ser instanciado.
Assim, as duas classes seguintes são idênticos:
pública Class1 {Class1 pública () {}} Class1 pública {}
No primeiro exemplo, a classe declara explicitamente um construtor que não aceita parâmetros e não tem declarações em seu corpo. No segundo exemplo, Java cria um construtor padrão que funciona tal como o construtor mostrado no primeiro exemplo.
O construtor padrão é não criado se você declarar quaisquer construtores para a classe. Como resultado, se você declarar um construtor que aceita parâmetros e ainda quer ter um construtor vazio (sem parâmetros e nenhum corpo), você deve declarar explicitamente um construtor vazio para a classe.
Um exemplo pode esclarecer este ponto para cima. O código a seguir faz não compilar:
classe pública BadActorApp {public static void main (String [] args) {Ator a = new Ator () - // erro: não irá compilar}} class Ator {private String lastName-privada boolean Ator Cadeia firstName-privada goodActor-pública (string passada, string primeiro) {lastName = última firstName = primeiro-} Ator pública (string passado, string first, boolean bom) {lastName = última firstName = first-goodActor = bom-}}
Este programa não irá compilar porque não prevê explicitamente um construtor padrão para a aula Ator porque prevê outros construtores, o construtor padrão não é gerada automaticamente.
Chamando outros construtores
Um construtor pode chamar outro construtor da mesma classe usando a palavra-chave especial isso como uma chamada de método. Esta técnica é comumente usado quando você tem vários construtores que constroem um sobre o outro.
Considere esta classe:
classe Actor pública {private String Ator lastName-privada Cadeia firstName-privada boolean goodActor-pública (String passada, String primeiro) {lastName = última firstName = primeiro-} Ator pública (String passado, String first, boolean bom) {this ( passado, em primeiro lugar) -goodActor = bom-}}
Aqui, o segundo construtor chama o primeiro construtor para definir os campos lastName e firstName. Em seguida, ele define o campo goodActor.
Você tem algumas restrições na utilização da palavra-chave this como uma chamada de construtor:
Você pode chamar outro construtor só na primeira declaração de um construtor. Assim, o seguinte código não irá compilar:
Ator pública (String passado, String first, boolean bom){ goodActor = bom- este (último, primeiro) - // Erro: não irá compilar}
Se você tenta compilar uma classe com esse construtor, você receber uma mensagem dizendo chamada para este deve ser primeira instrução no construtor.
Cada construtor pode chamar apenas um outro construtor, mas você pode construtores de cadeia. Se uma classe tem três construtores, o primeiro construtor pode chamar o segundo, que por sua vez chama o terceiro.
Você não pode criar loops em que construtores chamam um ao outro. Aqui está uma classe que não irá compilar:
classe CrazyClass{Private String firstString-Private String secondString-pública CrazyClass (String primeira, String segundo){ este (em primeiro lugar) - secondString = segunda}pública CrazyClass (String primeiro){ isto (em primeiro lugar, "DEFAULT") - // erro: não vai// compile}}
O primeiro construtor começa chamando o segundo construtor, que chama o primeiro construtor. O compilador reclama que esse erro é uma invocação do construtor recursiva e educadamente se recusa a compilar a classe.
Se você não chamar explicitamente um construtor na primeira linha de um construtor, Java insere um código que chama automaticamente o construtor padrão da classe base - ou seja, a classe que esta classe herda.