Clases y objetos de Java (¡¡explicación detallada en 7000 palabras !!! Le llevará a comprender a fondo las clases y los objetos)


Tabla de contenido

1. Comprensión preliminar de la orientación a objetos.

1. ¿Qué es la orientación a objetos?

2. Orientado a objetos y orientado a procesos

(1) Proceso de lavado tradicional

(2) Proceso de lavado moderno

Editar

2. Definición y uso de clases

1. Formato de definición de clase

3. Creación de instancias de clases.

1. ¿Qué es la creación de instancias?

2. Descripción de clase y objeto.

4. El uso de este

1. ¿Por qué usar esto?

Escribe una clase de cita.

razón:

Solución:

2. ¿Cuál es esta referencia?

3. Características de esta referencia

5. Construcción e inicialización de objetos.

1. Cómo inicializar el objeto.

2. Método de construcción

(1) Concepto

(2) Características

3. Inicialización predeterminada

4. Inicialización en el lugar

6. Embalaje

1. El concepto de embalaje

2. Calificador de acceso

3. Paquete de expansión del paquete

(1) Concepto de paquete

(2) Importar clases en el paquete.

(3) Paquete personalizado

(4) Ejemplos de control de derechos de acceso a paquetes

(5) Paquetes comunes

Siete miembros estáticos

1. Volvamos a hablar de estudiantes

2. Modificación estática de variables miembro.

3. Método de miembro modificado estático

4. Inicialización de variables miembro estáticas.

8. Bloques de código

1. Concepto y clasificación de bloques de código.

2. Bloques de código ordinarios

3. Construir bloques de código

4. Bloque de código estático



1. Comprensión preliminar de la orientación a objetos.

1. ¿Qué es la orientación a objetos?

Java es un lenguaje puro orientado a objetos (Programa Orientado a Objetos, abreviado OOP) En el mundo orientado a objetos, todo es un objeto. La orientación a objetos es una idea para resolver problemas, que se basa principalmente en la interacción entre objetos para completar una cosa. El uso del pensamiento orientado a objetos para manejar programas está más en línea con la comprensión de las cosas por parte de las personas y es muy amigable para el diseño, expansión y mantenimiento de programas grandes.
 

2. Orientado a objetos y orientado a procesos

(1) Proceso de lavado tradicional

La lavandería tradicional se centra en el proceso de lavado de la ropa. Si falta un eslabón, es posible que no funcione. Además, diferentes prendas se lavan de diferentes maneras, tiempos y métodos de escurrido, lo que hace que sea más difícil de manejar. Si vas a lavar tus zapatos en el futuro, esa es otra forma de ponerlos. Escribir código de esta manera será más problemático de expandir o mantener en el futuro.

(2) Proceso de lavado moderno

Hay cuatro objetos en total: personas, ropa, ropa y lavadoras.

Todo el proceso de lavado de ropa consiste en tirar la ropa a la lavadora, agregar la ropa a lavar, encender la lavadora y la lavadora completará el proceso de lavado y secará la ropa.

Todo el proceso se completa principalmente mediante la interacción de cuatro objetos: personas, ropa, detergente en polvo y lavadoras. Las personas no necesitan preocuparse por cómo la lavadora lava la ropa o cómo la seca.

El procesamiento orientado a objetos no se centra en el proceso de lavado de ropa. Los usuarios no necesitan preocuparse por cómo la lavadora lava la ropa y cómo secarla. Solo necesitan poner la ropa en la lavadora, verterla el detergente y enciende el interruptor, es decir, se hace a través de la interacción entre objetos.

Aviso:

La orientación a procesos y la orientación a objetos no son lenguajes, sino métodos para resolver problemas, no son buenos ni malos y cada uno tiene su propio escenario de aplicación especial.
 

2. Definición y uso de clases

1. Formato de definición de clase

clase nombre de clase {

        Atributos de clase (variables miembro);

        Comportamiento de clase (métodos miembros);

}

Los contenidos contenidos en una clase se denominan miembros de la clase. Los atributos se utilizan principalmente para describir clases y se denominan atributos miembro o variables miembro de la clase. Los métodos describen principalmente qué funciones tiene una clase y se denominan métodos miembro de la clase.
 

ejemplo:

 class WashMachine {

        //属性
        public String brand;//品牌
        public String type;//型号
        public double weight;//重量

        //行为
        public void washClothes() {
        //洗衣服
            System.out.println("洗衣功能");
        }
    }

Tenga en cuenta que el nombre de la clase se define en mayúsculas y minúsculas.

Notas:
1. Generalmente, solo se define una clase en un archivo
2. La clase donde se encuentra el método principal generalmente debe estar decorada con público (nota: Eclipse encontrará el método principal en la clase modificada pública de forma predeterminada).
3. La clase modificada públicamente debe ser la misma que Los nombres de los archivos son los mismos
4. No modifique fácilmente el nombre de la clase modificada pública, si desea modificarlo, modifíquelo a través de la herramienta de desarrollo.

 

3. Creación de instancias de clases.

1. ¿Qué es la creación de instancias?

Definir una clase es equivalente a definir un nuevo tipo en la computadora, similar a int y double, excepto que int y double son tipos integrados que vienen con el lenguaje Java, mientras que la clase es un nuevo tipo definido por el usuario. como los anteriores: clase PetDog y clase Student. Todas son clases (un tipo recién definido). Con estos tipos personalizados, puede usar estas clases para definir instancias (u objetos).
El proceso de creación de un objeto usando un tipo de clase se llama instanciación de la clase. En Java, la palabra clave new se usa para crear una instancia del objeto con el nombre de la clase.

ejemplo:

class PetDog {
    public String name;//姓名
    public String color;//颜色

    public void wag() {
        System.out.println("摇尾巴");
    }

    public void braks() {
        System.out.println("汪汪汪");
    }

    public void print() {
        System.out.println(this.name);
        System.out.println(this.color);
    }
}
public class TestDemo {
    public static void main(String[] args) {

        PetDog petdog1 = new PetDog();
        PetDog petdog2 = new PetDog();

        petdog1.name = "阿黄";
        petdog1.color = "黄色";
        petdog1.wag();
        petdog1.braks();
        petdog1.print();

        petdog2.name = "阿黑";
        petdog2.color = "黑色";
        petdog2.wag();
        petdog2.braks();
        petdog2.print();
    }
}

Resultado de salida:

Nota:
La palabra clave new se usa para crear una instancia de un objeto.
Use . para acceder a las propiedades y métodos del objeto.
La misma clase puede crear dos instancias.
 

2. Descripción de clase y objeto.

1. Una clase es simplemente algo parecido a un modelo, usado para describir una entidad y limitar los miembros de la clase.
2. Una clase es un tipo personalizado que se puede usar para definir variables.
3. Se puede crear una instancia de una clase para múltiples objetos, los objetos instanciados ocupan espacio físico real y almacenan variables miembro de la clase
4. Por ejemplo. Crear instancias de objetos de una clase es como usar dibujos de diseño arquitectónico para construir una casa en la realidad. Una clase es como un dibujo de diseño. Solo diseña lo que se necesita, pero no hay un edificio físico. De manera similar, una clase es solo un diseño que es instanciados Los objetos pueden realmente almacenar datos y ocupar espacio físico.

4. El uso de este

1. ¿Por qué usar esto?

Veamos primero los siguientes ejemplos:

Escribe una clase de cita.

Resultados de salida

Si cambiamos el nombre del parámetro formal de setDate para que sea el mismo que el de la variable miembro de tiempo, ¿cuál será el resultado de salida?

Se vuelve todo 0

razón:

Cuando cambiamos el nombre del parámetro formal para que sea el mismo que el nombre de la variable miembro , el valor del nombre del parámetro formal aquí es diferente del valor que esperamos.

Uno es el parámetro real pasado y el otro es la variable miembro. Sin embargo, en la clase, seguimos el principio de que las variables locales tienen prioridad . Los parámetros aquí representan las variables miembro. Al asignar valores a continuación, los parámetros formales se asignan a sí mismos. El tipo int no tiene ningún valor asignado y su valor predeterminado es 0 , por lo que se imprimirán todos los 0.

Solución:

Como se muestra en la imagen:

Resultado de salida:

2. ¿Cuál es esta referencia?

Esta referencia apunta al objeto actual (el objeto que llama al método miembro cuando el método miembro se está ejecutando). Se accede a todas las operaciones de variables miembro en el método miembro a través de esta referencia. Es solo que todas las operaciones son transparentes para el usuario, es decir, el usuario no necesita pasarlas y el compilador las completa automáticamente.

Nota: esto se refiere al objeto en el que se llama al método miembro.

3. Características de esta referencia


1. El tipo de this: corresponde a la referencia del tipo de clase, es decir, qué objeto se llama es el tipo de referencia de ese objeto.
2. esto solo se puede usar en "métodos miembros".
3. En "métodos miembros", Esto solo puede referirse al objeto actual, no al objeto actual. Luego se refiere a otros objetos
4. Este es el primer parámetro oculto del "método miembro", y el compilador lo pasará automáticamente. Cuando se ejecuta el método miembro, el El compilador será responsable de pasar la referencia del objeto del método miembro que llama al método miembro, y este es responsable de recibir


Una demostración simple a nivel de código ---> Nota: La clase Fecha en el lado derecho de la imagen a continuación también se puede compilar.

5. Construcción e inicialización de objetos.

1. Cómo inicializar el objeto.

Por los puntos de conocimiento anteriores, sabemos que al definir una variable local dentro de un método Java, se debe inicializar; de lo contrario, la compilación fallará.

Para compilar el código anterior, es muy simple: simplemente establezca un valor inicial para a antes de usarlo oficialmente.

Si es un objeto:

Debe llamar al método SetDate escrito antes para establecer la fecha específica en el objeto. Se descubrieron dos problemas a través de los ejemplos anteriores:
1. Es problemático llamar al método SetDate para establecer una fecha específica cada vez que se crea el objeto ¿Cómo se debe inicializar el objeto?
2. Las variables locales deben inicializarse antes de poder usarse. ¿Por qué aún se pueden usar sin dar un valor después de declarar el campo?
 

2. Método de construcción

(1) Concepto

El método constructor (también llamado constructor) es un método miembro especial cuyo nombre debe ser el mismo que el nombre de la clase. El compilador lo llama automáticamente cuando se crea el objeto y solo se llama una vez durante todo el ciclo de vida del objeto.

(2) Características

1. El nombre debe ser el mismo que el nombre de la clase
2. No hay ningún tipo de valor de retorno y configurarlo como nulo no funcionará
3. El compilador lo llama automáticamente al crear un objeto y solo se llama una vez durante el proceso. ciclo de vida del objeto (equivalente al nacimiento de una persona, cada persona solo puede nacer una vez)
4. El constructor puede sobrecargarse (los usuarios proporcionan al constructor diferentes parámetros según sus propias necesidades)

5. Si el usuario no lo define explícitamente, el compilador generará un constructor predeterminado y el constructor predeterminado generado no debe tener parámetros.

En la clase Date anterior, no se define ningún constructor y el compilador generará un constructor sin parámetros de forma predeterminada.
 

Nota: Una vez definido por el usuario, el compilador ya no lo genera. (Rescata a la emergencia, no a los pobres)

6. En el constructor, puede llamar a otros constructores a través de esto para simplificar el código.

Nota:
①. this(...) debe ser la primera declaración en el constructor
②. No puede formar un ciclo

7. En la mayoría de los casos, se utiliza público para modificaciones y, en situaciones especiales, se modifica mediante privado.

3. Inicialización predeterminada
 

La segunda pregunta planteada anteriormente: ¿Por qué las variables locales deben inicializarse cuando se usan, pero las variables miembro no?

Para comprender este proceso, necesita saber algo de lo que sucede detrás de la nueva palabra clave:

Es solo una declaración simple a nivel de programa, pero es necesario hacer muchas cosas a nivel de JVM. Aquí hay una breve introducción:
1. Verifique si la clase correspondiente al objeto está cargada y cárguela si no
. Asignar espacio de memoria para el objeto
. 3. Manejar la seguridad de concurrencia. Problema
: por ejemplo: varios subprocesos se aplican a los objetos al mismo tiempo. La JVM debe garantizar que el espacio asignado al objeto no entre en conflicto.
4. Inicializar el espacio asignado
. Es decir: después de solicitar el espacio del objeto, los miembros contenidos en el objeto ya han establecido sus valores iniciales, como por ejemplo:

5. Establecer la información del encabezado del objeto
6. Llame al método constructor y asigne valores a cada miembro del objeto
 

4. Inicialización en el lugar
 

Al declarar una variable miembro, el valor inicial se proporciona directamente.

Nota: Una vez compilado el código, el compilador agregará todas estas declaraciones para la inicialización de miembros a cada constructor.

6. Embalaje

1. El concepto de embalaje

Hay tres características principales de los programas orientados a objetos : encapsulación, herencia y polimorfismo . En la etapa de clase y objeto, la investigación principal se centra en las características de encapsulación. ¿Qué es la encapsulación? En pocas palabras, son los detalles del blindaje de la carcasa .
Por ejemplo: para un dispositivo complejo como una computadora, todo lo que se le proporciona al usuario es: encender y apagar, ingresar a través del teclado, pantalla, conector USB, etc., lo que le permite interactuar con la computadora y completar las tareas diarias. . Pero en realidad: lo que realmente funciona en el ordenador es la CPU, la tarjeta gráfica, la memoria y demás componentes de hardware.

Los usuarios de computadoras no necesitan preocuparse por los componentes centrales internos, como cómo están dispuestos los circuitos en la placa base, cómo está diseñada la CPU, etc. Los usuarios solo necesitan saber cómo encender la computadora y cómo encenderla. interactuar con la computadora a través del teclado y el mouse. Por lo tanto, cuando los fabricantes de computadoras salen de fábrica, colocan un caparazón en el exterior para ocultar los detalles de implementación interna y solo proporcionan interruptores de alimentación, conectores para mouse y teclado en el exterior para que los usuarios puedan interactuar con la computadora.


Encapsulación: combine orgánicamente datos y métodos de operación de datos, oculte las propiedades y los detalles de implementación del objeto y solo exponga la interfaz para interactuar con el objeto.
 

2. Calificador de acceso

La encapsulación se logra principalmente en Java a través de clases y derechos de acceso: las clases pueden combinar datos y métodos para encapsular datos, lo que está más en línea con la comprensión humana de las cosas, mientras que los derechos de acceso se usan para controlar si los métodos o campos se pueden usar directamente fuera del clase. . Hay cuatro calificadores de acceso proporcionados en Java:

Por ejemplo:
público: puede entenderse como las características de apariencia de una persona, que todos pueden ver.
predeterminado: no es un secreto para la propia familia (en el mismo paquete), pero es privado para los demás.
privado: solo uno Lo sabe, otras personas lo saben. No sé nada.


[Explicación]
protected se usa principalmente en herencia.
El permiso predeterminado se refiere a: el permiso predeterminado cuando no se escribe nada.
Los permisos de acceso no solo pueden limitar la visibilidad de los miembros en la clase, sino también controlar la visibilidad de la clase.

3. Paquete de expansión del paquete

(1) Concepto de paquete

En el sistema orientado a objetos, se propone el concepto de paquete de software, es decir, para gestionar mejor las clases, se reúnen varias clases en un grupo, llamado paquete de software. Algo similar a un directorio. Por ejemplo: Para poder administrar mejor las canciones en tu computadora, una buena manera es poner canciones con los mismos atributos bajo el mismo archivo, o también puedes clasificar la música en una determinada carpeta con más detalle.

Los paquetes también se han introducido en Java. Los paquetes son la encarnación del mecanismo de encapsulación de clases, interfaces, etc., y son una buena manera de organizar clases o interfaces. Por ejemplo, las clases en un paquete no quieren ser utilizadas por clases. en otros paquetes.uso. Los paquetes también juegan un papel importante: se permite que existan clases con el mismo nombre en el mismo proyecto, siempre que estén en paquetes diferentes.

(2) Importar clases en el paquete.

Java nos ha proporcionado muchas clases listas para usar, por ejemplo, la clase Date: puede usar java.util.Date para importar la clase Date en el paquete java.util.

Sin embargo, esta forma de escribir es más problemática: puede utilizar la declaración de importación para importar el paquete.

Si necesita usar otras clases en java.util, puede usar import java.util.*

Sin embargo, le recomendamos que especifique explícitamente el nombre de la clase que se importará . De lo contrario, es probable que se produzcan conflictos.

En este caso necesitas usar el nombre completo de la clase.

Puede utilizar import static para importar métodos y campos estáticos en el paquete.

Precauciones:

Existe una gran diferencia entre importar y #include de C++: C++ debe #include para introducir el contenido de otros archivos, pero Java no lo requiere.

importar es solo para que sea más conveniente al escribir código. importar es más similar al espacio de nombres de C++ y usar

(3) Paquete personalizado
 

Reglas básicas
① Agregue una declaración de paquete en la parte superior del archivo para especificar en qué paquete se encuentra el código.
② El nombre del paquete debe especificarse lo más exclusivo posible, generalmente usando la forma inversa del nombre de dominio de la empresa (por ejemplo, com .bit.demo1).
③El nombre del paquete debe coincidir con la ruta del código. Por ejemplo, si crea un paquete de com.bit.demo1, entonces habrá una ruta correspondiente com/bit/demo1 para almacenar el código. ④Si es una
clase no tiene una declaración de paquete, la clase se colocará en un paquete predeterminado.


Pasos de la operación
① Primero cree un nuevo paquete en IDEA: haga clic derecho en src -> Nuevo -> Paquete

②Ingrese el nombre del paquete en el cuadro de diálogo emergente, por ejemplo com.bit.demo1

③Cree una clase en el paquete, haga clic derecho en el nombre del paquete -> Nuevo -> Clase y luego ingrese el nombre de la clase.

④En este punto puede ver que IDEA ha creado automáticamente la estructura de directorios en nuestro disco.

⑤Al mismo tiempo, también vimos que apareció una declaración de paquete en la parte superior del archivo Test.java recién creado.

(4) Ejemplos de control de derechos de acceso a paquetes

La clase Computadora se encuentra en el paquete com.bit.demo1 y TestComputer se encuentra en el paquete com.bit.demo2:

(5) Paquetes comunes

1. java.lang: clases básicas (String, Object) de uso común en el sistema, este paquete se importa automáticamente desde JDK1.1 en adelante.
2. java.lang.reflect: paquete de programación de reflexión Java
3. java.net: paquete de desarrollo de programación de red.
4. java.sql: Paquete de soporte para el desarrollo de bases de datos.
5. java.util: es un paquete de herramientas proporcionado por java. (Clases de colección, etc.) Muy importante
6. java.io: kit de desarrollo de programación de E/S.

Siete miembros estáticos


1. Volvamos a hablar de estudiantes
 

Utilice la clase de estudiante presentada en el artículo anterior para crear instancias de tres objetos s1, s2 y s3. Cada objeto tiene su propio nombre, género, edad, calificación y otra información de miembro únicos. Esta información se usa para describir a diferentes estudiantes. De la siguiente manera :

Supongamos que tres estudiantes están en la misma clase, entonces deben estar en la misma clase. Dado que están en la misma clase, ¿podemos agregar una variable miembro a la clase para guardar el aula donde están los estudiantes? La respuesta es no.


Cada objeto contendrá una copia de las variables miembro definidas previamente en la clase Estudiante (llamadas variables de instancia) , porque esta información debe usarse para describir estudiantes específicos. Ahora queremos representar el aula donde los estudiantes asisten a clase. Los atributos de esta aula no necesitan almacenarse en cada objeto de estudiante, pero deben ser compartidos por todos los estudiantes. En Java, los miembros modificados por estático se denominan miembros estáticos o miembros de clase, no pertenecen a un objeto específico y son compartidos por todos los objetos.
 

2. Modificación estática de variables miembro.

Las variables miembro modificadas por estática se denominan variables miembro estáticas. La característica más importante de las variables miembro estáticas es que no pertenecen a un objeto específico y son compartidas por todos los objetos.
 

[Características de las variables miembro estáticas]
① No pertenece a un objeto específico, sino que es un atributo de la clase. Es compartido por todos los objetos y no se almacena en el espacio de un determinado objeto. ② Se puede acceder a él a través
del objeto o el nombre de la clase, pero generalmente es más recomendado usar el nombre de la clase para acceder
③ Las variables de clase se almacenan en el área del método
④ El ciclo de vida sigue la vida de la clase (es decir: se crea cuando la clase se carga y se destruye cuando la clase está descargada)

Ejecute el código anterior en modo de depuración y luego podrá ver en la ventana de monitoreo que las variables miembro estáticas no están almacenadas en un objeto específico.

3. Método de miembro modificado estático

Generalmente, los miembros de datos de una clase se configuran como privados y los métodos de los miembros se configuran como públicos. Después de la configuración, ¿cómo se puede acceder al atributo classRoom en la clase Estudiante fuera de la clase?

¿Cómo se debe acceder a los atributos estáticos?
En Java, los métodos miembro modificados por estático se denominan métodos miembro estáticos, son métodos de la clase y no son exclusivos de un objeto. Generalmente se accede a los miembros estáticos a través de métodos estáticos.

[Características del método estático]

① No pertenece a un objeto específico, es un método de clase.
② Se puede llamar a través del objeto o mediante el nombre de la clase.nombre del método estático (...). Se recomienda más usar este último.
③ Usted no se puede acceder a ningún método no estático en el método estático.Variables miembro

④ No se puede llamar a ningún método no estático en un método estático, porque los métodos no estáticos tienen este parámetro y esta referencia no se puede pasar al llamar a un método estático.         

⑤Los métodos estáticos no se pueden anular y no se pueden utilizar para implementar polimorfismo

4. Inicialización de variables miembro estáticas.
 

Nota: Las variables miembro estáticas generalmente no se inicializan en el constructor, lo que se inicializa en el constructor son los atributos de instancia relacionados con el objeto.


Hay dos tipos de inicialización de variables miembro estáticas: inicialización in situ e inicialización de bloque de código estático.
 

①Inicialización en el lugar: la inicialización en el lugar se refiere a: dar el valor inicial directamente al definir

②Inicialización del bloque de código estático (continuar viendo más adelante)

8. Bloques de código

1. Concepto y clasificación de bloques de código.

Un fragmento de código definido con {} se denomina bloque de código. Según la posición y las palabras clave definidas en el bloque de código, se puede dividir en los siguientes cuatro tipos:
        ① Bloque de código ordinario
        ② Bloque de construcción
        ③ Bloque estático
        ④ Bloque de código síncrono (no se analiza aquí)

2. Bloques de código ordinarios

Este uso es menos común.
 

3. Construir bloques de código

Bloque de construcción: un bloque de código definido en una clase (sin modificadores). También llamado: bloque de código de instancia. Los bloques de código de construcción se utilizan generalmente para inicializar variables miembro de instancia.

4. Bloque de código estático

Los bloques de código definidos usando estático se denominan bloques de código estático. Generalmente se utiliza para inicializar variables miembro estáticas.

Notas
① No importa cuántos objetos sean generados por un bloque de código estático, solo se ejecutará una vez
② Las variables miembro estáticas son atributos de la clase, por lo que se abren e inicializan cuando la JVM carga la clase
③ Si una clase contiene múltiples bloques de código estático, al compilar código, el compilador ejecutará (fusionará) uno tras otro en el orden definido.④El
bloque de código de instancia solo se ejecutará cuando se cree un objeto.
 

Supongo que te gusta

Origin blog.csdn.net/cool_tao6/article/details/132779013
Recomendado
Clasificación