Hola y bienvenidos a esta elección.
A continuación vamos a estudiar el tema de paso por referencia en Java están listos.
Vamos bien vamos a cerrar este proyecto sin derecho Kloss y vamos a crear un nuevo proyecto damos un
enfile mi proyecto seleccionemos lleva huid Mayberry Java Application el nombre del proyecto se va a
llamar paso por referencia y lo vamos a depositar en la carpeta de cursos diagonal Java dejamos los
demás valores por default y quitamos el nombre del paquete bien damos clic en Finalizar y vamos a agregar
una clase a nuestro proyecto damos derecho a la clase y el nombre de la clase se va a llamar persona
y dejamos los demás valores por default damos finalizar quitamos estos comentarios y vamos a agregar
lo siguiente a nuestra clase únicamente va a tener un atributo llamado nombre y posteriormente vamos
a agregar dos métodos un método llamado obtener nombre que va a regresar un string con el nombre establecido
en esta persona ayudándonos a través del atributo nombre así que el método se llama obtener nombre no
reciben ningún argumento y el cuerpo del método únicamente vamos a hacer un Bruton del atributo nombre
podemos observar el uso de Díez para hacer referencia a los atributos de nuestra clase o métodos de
nuestra clase.
Así que en este caso estamos utilizando Díez para acceder al atributo de nombre que hemos definido en
esta clase así que con esto regresamos el atributo de nuestra clase nombre y vamos a definir otro método
para modificar el valor de ese atributo.
Así que definimos el método que es público no va a regresar nada por lo tanto el tipo de dato es Veidt
y el nombre del método es cambiar nombre va a recibir un argumento que es de tipo string llamado nuevo
nombre y básicamente lo que vamos a hacer con el argumento que estamos recibiendo vamos a modificar
el valor del atributo de nuestra clase así que ponemos diez puntos nombre para hacer referencia al atributo
de nuestra clase y le asignamos el valor del nuevo nombre así que básicamente estamos definiendo un
método para poder acceder al valor del atributo nombre y estamos definiendo otro método para poder modificar
el valor del atributo nombre recibimos un argumento llamado un nuevo nombre y este valor lo vamos a
asignar al atributo nombre.
Por ello es que volvemos a utilizar dis para poder acceder al atributo de nuestra clase.
Recordemos que no es necesario utilizarlo pero es una buena práctica ya que de esta manera rápidamente
sabemos que nombre es un atributo de nuestra clase ya que está siendo referenciado por el operador dis
bien como siguiente paso vamos a definir nuestra siguiente clase para poner a prueba el concepto de
paso por referencia así que se ve en nuestro proyecto o sobre Sors package.
Cualquiera de las dos opciones damos derecho new Java class y el nombre de la clase se va a llamar paso
por referencia dejamos los demás valores por default y damos siguen finalizar quitamos estos comentarios
vamos a agregar un método main Public Static void main tabulador damos un formato y ya tenemos nuestra
clase lista para empezar a trabajar.
Ahora lo que vamos a hacer aquí es primeramente vamos a definir un objeto de tipo personal así que definimos
una variable llamada persona de tipo persona así que recordemos que este es el tipo y ese es el nombre
de nuestra variable.
Posteriormente vamos a crear un nuevo objeto ni una persona y debido a que nuestra clase persona no
hemos definido ningún constructor recordemos que para definir un constructor debe de llamarse exactamente
igual que el nombre de la clase y no debe de regresar ningún tipo de dato.
Por lo tanto no estamos observando un método que se llame igual que la clase pero debido a esto entonces
el compilador de Java en automático agrega el constructor vació sin argumentos.
En esta clase de persona por lo tanto en este momento podemos crear objetos de tipo persona utilizando
el constructor vació ya que en automático el compilador agregó este constructor por nosotros si es que
no hemos definido ningún otro constructor con argumentos en nuestra clase así que con eso estamos definiendo
un objeto de tipo Persona y posteriormente lo que hacemos es cambiar el nombre de nuestro objeto de
tipo personal así que por medio de la variable persona que es una variable local mandamos a llamar al
método cambiar nombre y lo que vamos a hacer es pasarle una cadena en este caso le vamos a asignar el
nombre de Juan y ahora lo que vamos a hacer es imprimir el valor de este nombre así que vamos a utilizar
ese auto y mandamos a imprimir el valor del nombre de la persona que hemos creado.
Para ello utilizamos la variable que está apuntando al objeto que hemos creado y mandamos a llamar el
método obtener nombre para que nos regrese el nombre que hemos establecido sobre el objeto persona así
que guardamos cambios y mandamos a ejecutar
y podemos observar que el valor del nombre es igual a Juan así que en este momento ya hemos asignado
un valor al atributo de nombre de nuestra clase persona pero ahora vamos a poner en práctica el concepto
de paso por referencia y esto quiere decir que desde otros métodos podemos cambiar los valores de los
atributos del objeto al cual estamos apuntando.
A diferencia de los tipos primitivos en el cual únicamente se pasa una copia del valor y no podemos
modificar los valores desde otros métodos.
Cuando trabajamos con objetos esto es diferente así que vamos a hacer lo siguiente Vamos a definir un
método llamado modificar persona y lo que vamos a hacer es que le vamos a pasar la referencia de nuestra
variable persona Punto y Coma y vamos a definir este método vamos a apoyarnos de Lide damos clic y nos
va a crear en automático el método modificar persona y podemos observar que va a recibir como argumento
un objeto de tipo Persona damos clic y podemos ver que nos crea en automático el método que es privado
es decir que únicamente se puede utilizar dentro de esta clase.
Vemos que es estático debido a que es un método que estamos utilizando dentro del método main y como
el método es estático entonces este método también debe ser estático para que lo podamos mandar a llamar
posteriormente no va a regresar ningún valor.
Por lo tanto es de tipo Void el método se llama modificar persona y recibe un objeto de tipo persona.
Sin embargo vamos a cambiar el nombre de esta variable para que no haya confusión con otra variable
que estamos utilizando esta variable es el argumento de este método así que ponemos personas ARAG para
hacer referencia a que es el argumento de este método y es una variable local a este método.
En cambio esta es una variable local al método main y este método de lo que se va a encargar es de intentar
modificar el valor del atributo nombre del objeto que hemos pasado como referencia.
Así que en este caso recordamos que esta variable está apuntando a un objeto que se ha creado en esta
línea de código por lo tanto lo que estamos pasando en la llamada a este método es únicamente la referencia
del objeto al cual está apuntando.
Por lo tanto en este momento ahora dos variables están apuntando al objeto que se ha creado en esta
línea tanto la variable persona apunta este objeto y cuando se manda llamar.
Este método también esta variable persona AR apunta al mismo objeto por lo tanto desde otro método vamos
a poder acceder a los atributos de nuestra clase y cualquier valor que tengamos dentro de este objeto
va a ser el mismo valor que vamos a poder observar ya sea desde el método main o desde el método modificar
persona ya que ambas variables están apuntando al mismo objeto.
Por lo tanto van a ver el mismo contenido así que vamos a poner en prueba esto ya que estamos recibiendo
la referencia del objeto y a través de la variable persona Hark vamos a poder acceder al atributo nombre
y lo que vamos a hacer es mandar a llamar el método cambiar nombre y le vamos a asignar el valor de
Carlos I para comprobar que esto se ha modificado correctamente desde otro método.
Entonces vamos a mandar a imprimir de nueva cuenta el valor de nombre
modificado y con nuestra variable persona que está apuntando al objeto que hemos creado mandamos a llamar
el método obtener nombre así que guardamos cambios y ejecutamos y podemos observar que el primer valor
fue el valor de Juan y posteriormente el valor del nombre modificado es igual a Carlos I esto lo estamos
haciendo desde otro método así que el método modificar persona sí pudo acceder al mismo objeto y pudo
cambiar el valor del atributo nombre de Juan a Carlos así que podemos observar en este caso un ejemplo
de paso por referencia ya que en este caso estamos pasando la referencia del objeto que hemos creado.
En esta línea de código y se la pasamos al método modificar persona y a través de la variable persona
Hark recibimos la referencia mandamos a llamar el método cambiar nombre y entonces se modifica el valor
de nombre del objeto que hemos recibido y finalmente termina este método.
Regresamos a la ejecución del método main y se imprime el nombre modificado.
Vamos a ejecutar paso a paso este código para que veamos a detalle cómo funciona así que ponemos un
punto de ruptura.
Damos clic derecho y de Buffalo presionamos F8 y podemos observar que se ha creado un objeto de tipo
Persona en la dirección de memoria hexadecimal 5 F 8 E de 2 37 así que si la dirección de memoria donde
se ha creado este objeto.
Recordemos que hemos hecho lo siguiente desde nuestra plantilla de la clase persona que hemos creado
tenemos nuestra clase persona por medio del operador Niu estamos diciendo que debemos de crear un nuevo
objeto de esta clase así que estamos creando un nuevo objeto de tipo Persona en la dirección de memoria
0 x y tenemos toda esta dirección de memoria.
Vamos a resumirlo a dos XXXVII simplemente para que podamos hacer referencia de esa dirección de memoria
pero recordemos que este es el valor completo así que se ha creado un objeto en la dirección de memoria
0 x 2 37 ya que esta es la dirección hexadecimal de este objeto y posteriormente en esta línea de código
se está creando una variable persona llamada persona de tipo persona que está apuntando a este objeto
en esta dirección.
0 x 2 37.
Así que el valor que contiene esta variable persona es la dirección de memoria 0 x 2 37 y posteriormente
lo que sucede si presionamos F8 podemos observar que nuestra variable persona que apunta a un objeto
de tipo persona es la dirección de memoria 2 37.
Si lo abrimos hemos cambiado el valor de nombre a Juan así que el objeto que hemos creado en la dirección
de memoria 0 x 2 37 a través de la variable persona
está apuntando a este objeto.
Lo que hizo fue cambiar el atributo de nombre y le asignó el valor de Juan esto fue lo que hizo con
el método cambiar nombre y vamos a comprobar esto ejecutando esta línea y observando el valor de una
salida.
Ahora tenemos el valor de nombre igual a Juan y aquí viene lo interesante de esta lección que es el
paso por referencia.
Lo que vamos a hacer es pasar esta referencia a los 37 a nuestra variable persona Art en el método modificar
persona así que vamos a presionar F7 para entrar al detalle de la ejecución del método modificar persona
y podemos observar que en este momento ya la variable persona Art está apuntando exactamente al mismo
objeto en la dirección de memoria 2 37 así que podemos observar que tanto la variable persona definida
en esta línea de código apunta al objeto definido en la dirección de memoria 0 x 2 37 y en este momento
también esta variable persona Art apunta al mismo objeto.
Así que ambas variables pueden observar el valor del atributo nombre que en este momento es el valor
de Juan pero como en esta línea de código estamos accediendo al método cambiar nombre.
En este caso esta variable va a cambiar el valor de Juan Carlos pero ambas variables siguen apuntando
al mismo objeto así que ambas variables van a ver ahora el valor de Carlos y posteriormente una vez
que termina este método se elimina esta referencia se elimina esta variable pero la variable persona
continúa apuntando al objeto en la referencia 2 37.
Por lo tanto va a poder ver el valor de Carlos que es el valor modificado el cual se modificó desde
otro método así que podemos observar que el valor que está recibiendo esta variable es la referencia
del objeto.
Por lo tanto se conoce en este concepto como paso por referencia ya que estamos pasando en la referencia
del objeto en este caso la referencia del objeto persona bien vamos al tabulador de variables y podemos
observar que esta variable es de tipo personan y apunta exactamente al mismo objeto definido en la posición
de memoria 2 37 y podemos observar que en este momento todavía no se modifica el valor de la variable.
Por lo tanto podemos observar todavía el valor de Juan pero en cuanto presionemos f 8 entonces ahora
el valor se cambia a Carlos ya que lo que hizo fue mandar a llamar el método cambiar nombre de la clase
persona recibimos el nuevo valor y se asigna al atributo de nuestra clase así que podemos observar que
ahora el valor del atributo nombre cambió a Carlos y esta variable personar una vez que terminemos este
método se va a eliminar así que presionamos F8 podemos ver que ya no existe la variable personar ya
que ya estamos dentro de otro método del método main pero en este caso la variable persona todavía existe
y está apuntando al mismo objeto en la referencia de memoria 2 37 pero ahora el atributo de nombre ya
contiene el valor de Carlos ya que no ha modificado su referencia.
La única forma en que podría perder esta referencia la variable personan sería haciendo lo siguiente
Por ejemplo escribiendo personan igual a null.
En ese momento ya perdería la referencia ya que no tendría ninguna referencia asignada a la variable
persona o también si le asignamos una nueva referencia.
Por ejemplo Niu persona entonces también con esta línea de código perdería la referencia que se había
asignado.
En esta línea de código así que son las dos posibles maneras en que se pierda una referencia asignándole
el valor de Null a la variable de tipo Persona o asignándole una nueva referencia bien pero de momento
no vamos a modificar esta referencia para que la variable personan pueda seguir apuntando al objeto
que hemos creado.
En esta línea de código y finalmente vamos a imprimir el valor vamos a output y podemos ver que el valor
modificado ahora es igual a Carlos así que con esto estamos viendo el concepto de paso por referencia
así que eso es todo por esta elección y nos vemos en el siguiente vídeo.
Saludos.