Em Métodos e Membros de Dados, mencionamos que os objetos em Java são inicializados quando são criados. Durante a inicialização, os membros de dados do objeto recebem valores iniciais. Podemos inicializá-lo explicitamente. Se não atribuirmos um valor inicial ao membro de dados, o membro de dados adotará um valor inicial padrão com base em seu tipo.
A inicialização explícita exige que determinemos o valor inicial ao escrever o programa, o que às vezes é inconveniente. Podemos usar o construtor para inicializar objetos. Os construtores podem inicializar membros de dados e especificar operações específicas. Estas operações são executadas automaticamente quando o objeto é criado.
definir construtor
Um construtor é um método. Como os métodos normais, definimos construtores na classe. Os construtores possuem as seguintes características básicas:
1. O nome do construtor é igual ao nome da classe
2. O construtor não tem valor de retorno
Definimos o construtor da classe Human:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); (int h) { this.height = h; System.out.println("Eu nasci"); /** * acessador */ int getHeight() { return this.height }; altura interna;}
O programa acima imprimirá o código copiado da seguinte forma:
eu nasci
160
Os construtores podem receber listas de parâmetros como métodos comuns. Aqui, o construtor Human() recebe um número inteiro como parâmetro. No corpo do método, atribuímos o parâmetro inteiro à altura do membro de dados. O construtor faz duas coisas quando o objeto é criado:
Os construtores podem receber listas de parâmetros como métodos comuns. Aqui, o construtor Human() recebe um número inteiro como parâmetro. No corpo do método, atribuímos o parâmetro inteiro à altura do membro de dados. O construtor faz duas coisas quando o objeto é criado:
1. Forneça o valor inicial para o membro de dados this.height = h;
2. Realize operações iniciais específicas System.out.println("Nasci");
Dessa forma, podemos definir o valor inicial de maneira flexível ao chamar o construtor, sem ser tão restritos quanto a inicialização explícita.
Como o construtor é chamado? Quando criamos classes, todos usamos new Human(). Na verdade, estamos chamando o construtor da classe Human. Quando não definimos este método, Java fornecerá um construtor em branco para ser chamado ao usar new. Mas quando definimos um construtor, Java chamará o construtor definido ao criar um objeto. Ao chamar, fornecemos um parâmetro de 160. Você também pode ver nos resultados finais da execução que a altura do objeto foi realmente inicializada em 160.
Prioridade do método de inicialização
Nos métodos e membros de dados, podemos ver que se fornecermos um valor inicial explícito, então o membro de dados assumirá o valor inicial explícito em vez do valor inicial padrão. Mas se ambos fornecermos um valor inicial explícito e inicializarmos o mesmo membro de dados no construtor, o valor inicial final será determinado pelo construtor. Por exemplo, o seguinte exemplo:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); (int h) { this.height = h } /** * acessador */ int getHeight() { return this.height } int height=170;
O resultado da execução é:
Copie o código do código da seguinte forma:
160
O valor final de inicialização do objeto é consistente com o valor do método de construção. portanto:
Métodos de construção > inicializadores explícitos > inicializadores padrão
(Na verdade, a chamada prioridade está relacionada à ordem de execução durante a inicialização, irei me aprofundar neste ponto mais tarde)
Sobrecarga de método
Uma classe pode definir mais de um construtor, por exemplo:
public class Test{ public static void main(String[] args) { Human neZha = new Human(150, "merda"); System.out.println(neZha.getHeight() }}class Human{ /** * construtor 1 */ Humano(int h) { this.height = h; System.out.println("Eu nasci" } /** * construtor 2 */ Humano(int h, String) s) { this.height = h; System.out.println("Ne Zha: eu nasci, " + s); /** * acessador */ int getHeight() { return this.height; ;}
Resultados em execução:
Copie o código do código da seguinte forma:
Ne Zha: Eu nasci, merda
150
Dois construtores são definidos acima, ambos denominados Human. Os dois construtores possuem listas de parâmetros diferentes.
Ao usar new para criar um objeto, Java decidirá qual construtor construir com base nos parâmetros fornecidos. Por exemplo, ao construir neZha, fornecemos dois parâmetros: o número inteiro 150 e a string "merda", que corresponde à lista de parâmetros do segundo método de construção, então Java chamará o segundo método de construção.
Em Java, Java determina o método a ser chamado com base no nome do método e na lista de parâmetros. Isso é chamado de sobrecarga de método. Os métodos de construção podem ser sobrecarregados e os métodos comuns também podem ser sobrecarregados, como o método breath() abaixo:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(); aPerson.breath(10); System.out.println("hu...hu..."); } /** * respiração() 2 */ void respiração(int rep) { int i for(i = 0; i < rep; i++ ) { System.out.println("lu...lu...");
Resultados em execução:
Copie o código do código da seguinte forma:
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
lu...lu...
Como você pode ver, como um parâmetro é fornecido durante a chamada: o número inteiro 10, o segundo método breath() cuja lista de parâmetros corresponde a ele é chamado.
Resumir
características do construtor: mesmo nome da classe, sem valor de retorno
Finalidade do construtor: inicialização, sobrecarga do método de operação inicial: nome do método + lista de parâmetros -> qual método é realmente chamado