[Columna 58 de JavaSE] Constructores de objetos y problemas de prioridad, está claro de un vistazo quién viene primero

Página de inicio del autor : Diseñador Xiao Zheng
Breve introducción del autor : 3 años de experiencia en desarrollo JAVA full-stack, centrándose en la tecnología JAVA, personalización del sistema, orientación remota, dedicado a la transformación digital empresarial, profesor certificado de CSDN College y Blue Bridge Cloud Course.
Dirección principal : Vue, SpringBoot, subprograma WeChat

Este artículo explica el constructor de objetos y los problemas de prioridad en Java, y proporciona un código de muestra.

inserte la descripción de la imagen aquí

1. ¿Qué es un constructor?

En Java, un constructor es un método especial que se utiliza para crear e inicializar objetos .

La función principal del constructor es asignar espacio de memoria para el objeto e inicializar las variables de instancia del objeto .

El constructor tiene los siguientes 6 66 características, estudie cuidadosamente.

  1. El nombre del constructor es el mismo que el nombre de la clase envolvente.
  2. Los constructores no tienen tipo de devolución, incluido voidel tipo.
  3. Los constructores se llaman automáticamente cuando se crea un objeto y no se pueden llamar manualmente.
  4. El constructor puede tener parámetros para recibir los datos de inicialización pasados ​​desde el exterior.
  5. Si una clase no define un constructor, el compilador de Java generará un constructor sin argumentos de forma predeterminada.
  6. Si una clase define un constructor parametrizado, el compilador de Java ya no genera automáticamente un constructor sin parámetros.

Las funciones del constructor incluyen principalmente las siguientes 3 33 aspectos, por favor estudie cuidadosamente.

  1. Asignar espacio de memoria para el objeto : cuando el constructor crea el objeto, asigna espacio de memoria para el objeto en la memoria del montón.
  2. Inicializar las variables de instancia del objeto : el constructor puede inicializar las variables de instancia del objeto después de que se crea el objeto para garantizar que el objeto esté en un estado utilizable después de la creación.
  3. Realizar otras operaciones de inicialización necesarias : el constructor puede realizar otras operaciones de inicialización necesarias, como abrir archivos, establecer conexiones con bases de datos, etc.

El siguiente es un código de muestra que muestra el uso de un constructor simple, estudie cuidadosamente.

public class Person {
    
    
    private String name;
    private int age;
    
    // 无参构造函数
    public Person() {
    
    
        name = "";
        age = 0;
    }
    
    // 带参构造函数
    public Person(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }
    
    // Getter和Setter方法省略
    
    public static void main(String[] args) {
    
    
        // 使用构造函数创建对象并初始化
        Person person1 = new Person(); // 使用无参构造函数
        Person person2 = new Person("Alice", 25); // 使用带参构造函数
    }
}

En el ejemplo anterior, la clase Person define un constructor sin parámetros y un constructor con parámetros, a través del cual se puede crear e inicializar un objeto Person.

inserte la descripción de la imagen aquí


Dos, sin constructor de parámetros y constructor de parámetros.

El siguiente es un código de muestra que muestra el uso del constructor sin argumentos y el constructor de argumentos, estudie detenidamente.

public class Person {
    
    
    private String name;
    private int age;
    
    // 无参构造函数
    public Person() {
    
    
        name = "";
        age = 0;
    }
    
    // 有参构造函数
    public Person(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }
    
    // Getter和Setter方法省略
    
    public static void main(String[] args) {
    
    
        // 使用无参构造函数创建对象并初始化
        Person person1 = new Person();
        
        // 使用有参构造函数创建对象并初始化
        Person person2 = new Person("Alice", 25);
    }
}

En el ejemplo anterior, la clase Person define un constructor sin argumentos y un constructor de argumentos. Se puede crear un objeto Person predeterminado a través del constructor sin argumentos y luego setterse pueden establecer las propiedades del objeto llamando al método. Con el constructor parametrizado, puede inicializar directamente las propiedades mientras crea el objeto, eliminando la necesidad de llamar al settermétodo.

inserte la descripción de la imagen aquí


3. Prioridad de las llamadas al constructor

En Java, el orden de prioridad de las llamadas al constructor es el siguiente, estudie detenidamente.

  1. El constructor de la subclase primero llamará al constructor sin argumentos de la clase principal (si la clase principal tiene un constructor sin argumentos) para garantizar la inicialización del objeto de la clase principal.
  2. El constructor de la subclase puede usar superla palabra clave para llamar al constructor paramétrico de la clase principal para inicializar las propiedades de la clase principal.

El siguiente es un código de muestra que muestra el orden de prioridad de las llamadas al constructor, estudie detenidamente.

public class Animal {
    
    
    private String name;
    
    public Animal() {
    
    
        System.out.println("Animal类的无参构造函数");
    }
    
    public Animal(String name) {
    
    
        this.name = name;
        System.out.println("Animal类的有参构造函数");
    }
}

public class Dog extends Animal {
    
    
    private String breed;
    
    public Dog() {
    
    
        System.out.println("Dog类的无参构造函数");
    }
    
    public Dog(String breed) {
    
    
        super("某某动物");
        this.breed = breed;
        System.out.println("Dog类的有参构造函数");
    }
    
    public static void main(String[] args) {
    
    
        Dog dog1 = new Dog();
        System.out.println("--------------------");
        Dog dog2 = new Dog("某某犬种");
    }
}

La salida es:

Animal类的无参构造函数
Dog类的无参构造函数
--------------------
Animal类的有参构造函数
Dog类的有参构造函数

Se puede ver en los resultados de salida que al crear Dogun objeto, primero se llama al constructor sin argumentos de la clase principal y luego Animalse llama Dogal constructor sin argumentos de la subclase. Y cuando se usa superla palabra clave para llamar al constructor paramétrico de la clase principal, primero se llamará al constructor paramétrico de la clase principal y luego se llamará al constructor paramétrico de la subclase. Esto asegura la inicialización del objeto de la clase principal.

inserte la descripción de la imagen aquí


4. Escenarios para funciones constructoras

Los constructores en Java tienen los siguientes 5 55 escenarios de uso, estudie cuidadosamente.

  1. Crear un objeto : el constructor se utiliza para crear un objeto y asignar espacio de memoria. Se puede crear una instancia de una clase a través del constructor e inicializar las propiedades del objeto.
  2. Inicializar las propiedades del objeto : el constructor puede inicializar las variables de instancia del objeto después de crear el objeto para garantizar que el objeto esté en un estado utilizable después de la creación.
  3. Realizar otras operaciones de inicialización necesarias : el constructor puede realizar otras operaciones de inicialización necesarias, como abrir archivos, establecer conexiones con bases de datos, etc. Puede realizar algunas operaciones necesarias de preprocesamiento o inicialización en el constructor para asegurarse de que el objeto esté en el estado correcto antes de su uso.
  4. Proporcione constructores sobrecargados : al proporcionar múltiples constructores, los objetos se pueden crear en función de diferentes combinaciones de parámetros. De esta manera, se pueden crear fácilmente objetos con diferentes configuraciones de acuerdo con diferentes requisitos, lo que mejora la flexibilidad y la reutilización del código.
  5. Realice la cadena de constructores en la relación de herencia : el constructor de la subclase puede usar superla palabra clave para llamar al constructor de la clase principal para garantizar la inicialización del objeto de la clase principal. A través de la cadena de constructores, el constructor de la clase principal se puede llamar capa por capa para garantizar que todas las propiedades de la clase principal se inicialicen correctamente.

En general, el constructor es un método importante que se utiliza para crear e inicializar objetos. Desempeña un papel clave en el ciclo de vida del objeto, asegurando que el objeto esté en el estado esperado después de la creación, proporcionando la base correcta para las operaciones posteriores.


5. Preguntas de la entrevista de prioridad del constructor

Pregunta: supongamos que hay una clase A y una clase B, la clase B hereda de la clase A y ambas tienen constructores sin parámetros y constructores con parámetros. Al crear un objeto de clase B, ¿cuál es la prioridad de llamada del constructor?

respuesta:

  1. Primero, se llama al Bconstructor parametrizado de la clase (si está presente) .
  2. Si Bel constructor parametrizado de la clase usa superla palabra clave para llamar Aal constructor parametrizado de la clase principal, Ase llamará primero al constructor parametrizado de la clase.
  3. Si Bel constructor parametrizado de la clase no utiliza la palabra clave para llamar al constructor parametrizado de superla clase principal , se llamará inmediatamente al constructor sin parámetros de la clase.AA
  4. Finalmente, se ejecutará el código de inicialización en el constructor parametrizado de la clase B.

Esto garantiza que los constructores tanto de la clase principal Acomo de la subclase se llamen y ejecuten correctamente, lo que garantiza que el objeto tenga el estado correcto cuando se cree.B

Cabe señalar que si ni la clase Ani la clase Btienen un constructor de parámetros, se llamará directamente a su constructor sin argumentos y no hay otra lógica de llamada de constructor adicional.


6. Resumen

Este artículo explica los constructores de objetos y los problemas de prioridad en Java, y brinda un código de muestra. En el próximo blog, explicaré la reescritura de métodos y los problemas de prioridad en Java.

inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_41464123/article/details/131972567
Recomendado
Clasificación