En Métodos y miembros de datos, mencionamos que los objetos en Java se inicializan cuando se crean. Durante la inicialización, a los miembros de datos del objeto se les asignan valores iniciales. Podemos inicializarlo explícitamente. Si no asignamos un valor inicial al miembro de datos, el miembro de datos adoptará un valor inicial predeterminado según su tipo.
La inicialización explícita requiere que determinemos el valor inicial al escribir el programa, lo que a veces resulta inconveniente. Podemos usar el constructor para inicializar objetos. Los constructores pueden inicializar miembros de datos y especificar operaciones específicas. Estas operaciones se realizan automáticamente cuando se crea el objeto.
definir constructor
Un constructor es un método. Como los métodos normales, definimos constructores en la clase. Los constructores tienen las siguientes características básicas:
1. El nombre del constructor es el mismo que el nombre de la clase.
2. El constructor no tiene valor de retorno.
Definimos el constructor de la clase Humana:
prueba de clase pública{ public static void main(String[] args) { Persona humana = new Humano(160); (int h) { this.height = h; System.out.println("Nací"); /** * descriptor de acceso */ int getHeight() { return this.height } altura interna;}
El programa anterior imprimirá el código copiado de la siguiente manera:
yo nací
160
Los constructores pueden recibir listas de parámetros como métodos ordinarios. Aquí, el constructor Human() recibe un número entero como parámetro. En el cuerpo del método, asignamos el parámetro entero a la altura del miembro de datos. El constructor hace dos cosas cuando se crea el objeto:
Los constructores pueden recibir listas de parámetros como métodos ordinarios. Aquí, el constructor Human() recibe un número entero como parámetro. En el cuerpo del método, asignamos el parámetro entero a la altura del miembro de datos. El constructor hace dos cosas cuando se crea el objeto:
1. Proporcione el valor inicial para el miembro de datos this.height = h;
2. Realizar operaciones iniciales específicas System.out.println("Nací");
De esta manera, podemos establecer de manera flexible el valor inicial al llamar al constructor sin estar tan restringido como la inicialización explícita.
¿Cómo se llama el constructor? Cuando creamos clases, todos usamos new Human(). De hecho, estamos llamando al constructor de la clase Humana. Cuando no definimos este método, Java proporcionará un constructor en blanco al que se llamará cuando se utilice new. Pero cuando definimos un constructor, Java llamará al constructor definido al crear un objeto. Al llamar, proporcionamos un parámetro de 160. También puede ver en los resultados finales de la ejecución que la altura del objeto se inicializa a 160.
Prioridad del método de inicialización
En métodos y miembros de datos, podemos ver que si proporcionamos un valor inicial explícito, entonces el miembro de datos tomará el valor inicial explícito en lugar del valor inicial predeterminado. Pero si ambos proporcionamos un valor inicial explícito e inicializamos el mismo miembro de datos en el constructor, el constructor determinará el valor inicial final. Por ejemplo, el siguiente ejemplo:
prueba de clase pública{ public static void main(String[] args) { Persona humana = new Humano(160); (int h) { this.height = h; } /** * descriptor de acceso */ int getHeight() { return this.height } int height=170;
El resultado de ejecución es:
Copie el código de código de la siguiente manera:
160
El valor de inicialización final del objeto es consistente con el valor en el método de construcción. por lo tanto:
Métodos de compilación > Inicializadores explícitos > Inicializadores predeterminados
(De hecho, la llamada prioridad está relacionada con el orden de ejecución durante la inicialización, profundizaré en este punto más adelante)
Sobrecarga de métodos
Una clase puede definir más de un constructor, por ejemplo:
prueba de clase pública{ public static void main(String[] args) { Humano neZha = new Human(150, "mierda"); System.out.println(neZha.getHeight() }}clase Humano{ /** *); constructor 1 */ Human(int h) { this.height = h; System.out.println("Nací" } /** * constructor 2 */ Human(int h, String) s) { this.height = h; System.out.println("Ne Zha: nací, " + s); /** * descriptor de acceso */ int getHeight() { return this.height } int altura; ;}
Resultados de ejecución:
Copie el código de código de la siguiente manera:
Ne Zha: nací, mierda
150
Arriba se definen dos constructores, ambos denominados Human. Los dos constructores tienen listas de parámetros diferentes.
Cuando se utiliza new para crear un objeto, Java decidirá qué constructor construir en función de los parámetros proporcionados. Por ejemplo, al construir neZha, proporcionamos dos parámetros: el número entero 150 y la cadena "mierda", que corresponde a la lista de parámetros del segundo método de compilación, por lo que Java llamará al segundo método de compilación.
En Java, Java determina el método que se llamará en función tanto del nombre del método como de la lista de parámetros. Esto se denomina sobrecarga de métodos. Los métodos de compilación se pueden sobrecargar y los métodos ordinarios también se pueden sobrecargar, como el método Breath() a continuación:
prueba de clase pública{ public static void main(String[] args) { Persona humana = new Humano(); aPerson.breath(10); clase Humana{ /** * aliento() 1 */ aliento vacío() { System.out.println("hu...hu..."); } /** * aliento() 2 */ void aliento(int rep) { int i = 0; i < rep; i++ ) { System.out.println("lu...lu..."); } } int altura;}
Resultados de ejecución:
Copie el código de código de la siguiente manera:
lu... lu...
lu... lu...
lu... lu...
lu... lu...
lu... lu...
lu... lu...
lu... lu...
lu... lu...
lu... lu...
lu... lu...
Como puede ver, dado que se proporciona un parámetro durante la llamada: el número entero 10, se llama al segundo método Breath() cuya lista de parámetros coincide.
Resumir
características del constructor: mismo nombre que la clase, sin valor de retorno
Propósito del constructor: inicialización, sobrecarga del método de operación inicial: nombre del método + lista de parámetros -> qué método se llama realmente