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 COMPILE
public 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 name
8: this.color = "white"; // fine, but redundant
9: }
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.