Como você aprendeu no Capítulo 1, um construtor é um método especial que corresponde ao nome de a classe e não tem tipo de retorno. Aqui está um exemplo:
public class Bunny { public Bunny() { System.out.println("constructor"); }}O nome do construtor, Bunny , corresponde ao nome da classe, Bunny , e existe nenhum tipo de retorno, nem mesmo nulo . Isso faz disso um construtor. Você pode dizer por que esses dois não são construtores válidos para a classe Bunny ?
public bunny() { } // DOES NOT COMPILEpublic void Bunny() { }O primeiro não corresponde ao nome da classe porque Java faz distinção entre maiúsculas e minúsculas. Uma vez que não Além disso, Java sabe que não pode ser um construtor e deve ser um método regular. No entanto, está faltando o tipo de retorno e não é compilado. O segundo método é um permétodo corretamente bom, mas não é um construtor porque tem um tipo de retorno.
Construtores são usados ao criar um novo objeto. Esse processo é chamado instanciação porque cria uma nova instância da classe. Um construtor é chamado quando escrevemos novo seguido pelo nome da classe que queremos instanciar. Por exemplo:
new Bunny()Quando o Java vê a nova palavra-chave, ele aloca memória para o novo objeto. Java também parece para um construtor e o chama.
Um construtor é normalmente usado para inicializar variáveis de instância. A palavra - chave this diz Java que você deseja referenciar uma variável de instância. Na maioria das vezes, isso é opcional. o O problema é que, às vezes, existem duas variáveis com o mesmo nome. Em um construtor, one é um parâmetro e one é uma variável de instância. Se você não diz o contrário, Java fornece você é aquele com o escopo mais granular, que é o parâmetro Usando this.name diz Java você deseja a variável de instância.
Aqui está uma maneira comum de escrever um construtor:
1: public class Bunny {2: private String color;3: public Bunny(String color) {4: this.color = color;5: } }Na linha 4, atribuímos a cor do parâmetro à variável cor da instância . O certo lado da atribuição refere-se ao parâmetro porque não especificamos nada especial. O lado esquerdo da atribuição usa isso para informar ao Java que queremos que ele use o variável de instância.
Agora, vamos ver alguns exemplos que não são comuns, mas que você pode ver no exame:
1: public class Bunny {2: private String color;3: private int height;4: private int length;5: public Bunny(int length, int theHeight) {6: length = this.length; // backwards – no good!7: height = theHeight; // fine because a different name8: this.color = "white"; // fine, but redundant9: }10: public static void main(String[] args) {11: Bunny b = new Bunny(1, 2);12: System.out.println(b.length + " " + b.height + " " + b.color);13: } }A linha 6 está incorreta e você deve prestar atenção no exame. A variável de instância length começa com um valor 0. Esse 0 é atribuído ao comprimento do parâmetro do método . o A variável de instância permanece em 0. A linha 7 é mais direta. O parâmetro theHeight e A variável da instância height tem nomes diferentes. Como não há colisão de nomes, isso é não requerido. Finalmente, a linha 8 mostra que é permitido usá- lo mesmo quando não há duplicidade cação de nomes de variáveis.
Nesta seção, veremos construtores padrão, sobrecarregando construtores, campos finais, e a ordem de inicialização em uma classe.