Explicación detallada de la "referencia" de Java en orientación a objetos, incluidos los puntos de conocimiento involucrados
Está bien, déjame intentar analizarlo por ti. Puede que sea un poco excesivo, pero si sigues mis pensamientos, debería ser útil para los que eres nuevo en Java.
La cita, como su nombre indica, significa que hacer una cosa o algo actual requiere otras cosas que la respalden, o es una relación de referencia. En Java, hablar de referencias se trata más bien de relaciones de referencia.
En la práctica, por ejemplo, ahora hay una bolsa de harina sobre la mesa y tanto tú como yo necesitamos usarla. Cuando la uses por primera vez, puedes agregar harina a la bolsa de harina, también puedes reducir la cantidad de harina y también puedes agregar agua a la harina para cambiar la forma de la harina. Cuando la use nuevamente, esta bolsa de harina no se verá como era originalmente, sino como se verá después de que la uses y cómo se verá cuando la use.
De la misma manera, si lo usas después de que yo lo haya usado, solo podrás usarlo tal como estaba después de que yo lo usé. Porque ambos usamos la misma bolsa de harina. En otras palabras, esta bolsa de harina es exclusivamente para nosotros dos.
Entonces, seamos un poco abstractos, hablemos de referencias de Java.
Para entender qué es una referencia, primero hay que entender el concepto de objeto. Como recién llegado, creo que deberías haber oído que Java es un lenguaje de programación puramente orientado a objetos.
Su idea central es la orientación a objetos. Para escribir un programa, es decir, programar, primero debes saber por qué quieres programar. La razón es que consideras utilizar software para resolver cierto tipo de problema en la realidad. En esencia, el objetivo final es resolver los problemas de la vida real. Por lo tanto, la programación orientada a objetos consiste en abstraer problemas de la vida real o un determinado tipo de objetos físicos. Los resultados abstraídos se denominan clases en Java, por lo que la programación orientada a objetos también se puede llamar programación orientada a clases. Por supuesto, es posible que también escuche en el futuro que la programación Java en realidad se puede llamar programación orientada a interfaz. Esto es algo de lo que hablaremos más adelante.
La clave de la orientación a objetos es la abstracción. Por ejemplo, hay un gato o un perro. Ambos son objetos concretos. Pertenecen a la categoría de animales y, si se desglosan un poco, pueden pertenecer a la categoría de mamíferos. Si se dividen en categorías más amplias, los humanos y los animales pertenecen todos a la categoría biológica.
Sean cuales sean las clases de las que estemos hablando, todas son abstractas. Por ejemplo, los seres humanos no nos referimos a una determinada persona, sino a un determinado tipo de cosa. Y la persona específica llamada Zhang San o Li Si es una persona real y una persona real. Estas personas específicas se denominan objetos. Para ser más específicos, son objetos instancia de la clase humana.
Entonces la referencia se refiere a la relación entre un objeto específico que se puede encontrar a través de un determinado nombre o declaración. Por ejemplo, ahora hay muchos estudiantes en la clase y todos son diferentes. ¿Qué debe hacer un profesor si quiere encontrar un compañero concreto? Evidentemente la distinción se hace por el nombre. La maestra llama a Zhang San y Zhang San saldrá de la multitud. Por lo tanto, el nombre Zhang San se refiere a la persona específica Zhang San. También se puede entender que el nombre Zhang San se refiere a la persona Zhang San. La referencia aquí significa que la referencia del nombre se refiere a una persona específica.
Lo mismo ocurre en Java. El nombre del objeto o el nombre del atributo del objeto y el nombre del método se refieren a un objeto específico en sí y a los atributos y métodos del objeto.
Hay dos áreas en la memoria, una se llama área de pila y la otra se llama área de montón. Después de crear e inicializar un objeto de instancia específico de una clase en su programa, el objeto real se almacena en el área del montón. En consecuencia, puede declarar un nombre de variable en el área de la pila para hacer referencia al objeto real almacenado en el área del montón. Puede imaginarse como una aguja o una línea que conecta el nombre de la variable en el área de la pila con el objeto real en el área del montón.
Por supuesto, Java no tiene el concepto de punteros como C, por lo que esta aguja o línea se llama relación de referencia. El nombre de la variable en el área de la pila que hace referencia al objeto real se denomina variable de referencia. El objeto real es el objeto al que hace referencia la variable.
Tienes que entender esto cuidadosamente.
Luego volvemos al tema de la harina del que hablé más arriba. Dado que el objeto de referencia es relativamente real, la variable A puede hacer referencia a él y la variable B puede hacer referencia a él naturalmente. Por lo tanto, la operación A asigna un valor de 5 al objeto. Cuando otra variable B apunta al objeto de instancia de referencia, el valor del objeto al que B se refiere naturalmente es 5.
Entonces, cuando se trata de referencias, naturalmente tenemos que hablar de GC, que es la máquina de procesamiento de basura que viene con Java. Es un hilo de bajo nivel que se ejecuta en segundo plano. cuando la JVM se inicia y muere. El final con la JVM. La función de GC es reciclar objetos en el programa cuando el programa ya no los necesita, liberando más espacio de memoria. De forma similar a la papelera de reciclaje de una computadora, cuando el disco duro está lleno, es necesario eliminar algo para liberar capacidad para almacenar otras cosas. Lo mismo ocurre con la memoria.
¿Cómo determina el GC que el programa objeto ya no necesita usarlo? Depende de juzgar la referencia para ver si todavía se hace referencia al objeto.
Se puede imaginar que cuando ya no haya una aguja o una línea conectada a este objeto en el programa, el GC juzgará que no tiene valor para ser utilizado por otras cosas y, naturalmente, lo hará. Será reciclado.
Vale, eso es todo~~