Hola y bienvenidos esta elección.
A continuación vamos estudiar el tema de la palabra Null en Java están listos.
Vamos a cerrar este proyecto vamos a dar click derecho damos Thinking Class y vamos a crear un nuevo
proyecto File mi proyecto va Wild Maybe y ya va Application el nombre del proyecto va a ser palabra
Nul
y lo depositamos en la siguiente carpeta cursos diagonal Java quitamos el nombre del paquete y los demás
valores los dejamos por default damos en finalizar bien vamos a crear una nueva clase que se va a llamar
palabra Null.
Damos un derecho new Java class
la clase se llama palabra NULL y dejamos los demás valores por default y damos clic en Finalizar quitamos
estos comentarios agregamos un método main damos formato.
También podemos utilizar el shortcuts Asquith F como podemos observar para dar el formato o según el
Charcot que tengamos asignado.
Dependiendo de la plataforma en la cual estemos trabajando bien con esto ya tenemos lo básico para comenzar
a trabajar vamos a crear una clase también dentro de esta misma clase llamada persona abrimos el cuerpo
de nuestra clase va a tener un atributo de tipo string llamado nombre.
Vamos a agregar un constructor recordemos que se debe de llamar exactamente igual que el nombre de la
clase y recibe el argumento que es el nombre para inicializar el atributo de nombre posteriormente inicializar.
Nuestro atributo accediendo a nuestro tributo a través del operador dis y le asignamos el valor del
argumento que estamos recibiendo y también vamos a agregar un método que es de tipo públic regresa un
string llamado obtener nombre para que regrese el valor del atributo nombre que hayamos asignado así
que hacemos retorné y accedemos al atributo de nombre 10 puntos nombre recordemos que utilizar Diz no
es necesario.
En este caso ya que no hay ningún problema con ambigüedad sin embargo es recomendable para que sepamos
que esta variable nombre es el atributo de nuestra clase bien vamos a continuar.
Ahora vamos a crear lo siguiente Primero vamos a crear un objeto de tipo persona así que queremos una
variable llamada Persona 1 y le vamos a asignar una nueva referencia de un objeto de tipo persona ni
un persona y le pasamos el valor de Juan así que con esto estamos creando la variable Persona 1 que
apunta al objeto de tipo persona con el atributo de Juan y posteriormente mandamos a imprimir el valor
del nombre utilizando la persona 1 así que por medio de la variable Persona 1 mandamos a llamar el método
obtener nombre guardamos cambios y ejecutamos
y Podemos se que en este momento estamos accediendo sin ningún problema al método de obtener nombre
y lo que regresa es el nombre que hemos asignado en el atributo de nuestra clase.
Por lo tanto el mensaje que nos manda es Persona 1 nos manda el nombre de Juan viene hasta aquí no deberíamos
tener ningún problema es exactamente lo mismo que hemos visto en otras lecciones.
Ahora vamos a crear una segunda variable de tipo Persona pero esta variable se va a llamar Persona 2
y lo que le vamos a asignar es la misma referencia del objeto persona 1 así que ahora ya tenemos dos
variables que están apuntando al mismo objeto.
Así que básicamente lo que hemos hecho en este momento es que a partir de nuestra clase persona
que se definió en esta parte de nuestro archivo estamos creando un objeto de tipo persona así que se
crea el objeto de tipo Persona en cierta localidad de memoria y esa localidad de memoria se le asigna
a la variable Persona 1 así que la variable Persona 1 que es de tipo persona está apuntando al objeto
que se ha creado pero en esta línea de código ya tenemos también otra variable que apunta al objeto
así que ya tenemos dos variables que apuntan al mismo objeto que se ha creado en memoria.
En esta línea de código vamos a comprobarlo si mandamos a imprimir
escribimos Persona 2 punto obtener nombre vamos a ver el resultado podemos observar que en ambos casos
a través de la misma variable estamos accediendo al mismo objeto.
Por lo tanto el objeto contiene el atributo de nombre con el valor de Juan así que ambas variables apuntan
exactamente al mismo objeto.
Ahora lo que vamos a hacer es utilizar la palabra NULL para indicar que la persona 1 ya no va a apuntar
al objeto así que ponemos Persona 1 igual a NULL y para comprobar que la persona 1 ya no está accediendo
a este objeto podemos hacer lo siguiente volvemos a imprimir
Persona 1 vamos a intentar acceder al método obtener nombre así guardamos cambios y ejecutamos
y podemos ver que obtenemos un error en la consola la primera vez que se manda imprimir el valor que
se esta línea.
No hay ningún problema ya que la persona 1 la variable Persona 1 sí está apuntando a un objeto válido.
Después se le asigna la misma referencia a la variable Persona 2 y no hay ningún problema pero una vez
que la variable Persona 1 se le asigna el valor de Null.
Esto quiere decir que la variable Persona 1 ya no está apuntando a ningún objeto así que la palabra
Null en este caso significa ausencia de valor o que no apunta a ningún objeto.
Por lo tanto al querer acceder y mandar a llamar el método obtener nombre debido a que la variable Persona
1 ya no está apuntando a ningún objeto entonces esto nos va a mandar un error y podemos observar que
en este caso el error que nos manda es la excepción conocida como null pointer exception.
Y esto significa que la variable Persona 1 ya no está apuntando a ningún objeto ahora para evitar este
error lo que podemos hacer es lo siguiente podemos preguntar si la variable Persona 1 es diferente de
Null entonces se ejecuta esta línea de código.
Si no podemos mandar a imprimir
mandamos a imprimir la variable Persona 1 no apunta a ningún objeto así que guardamos cambios y ejecutamos
y podemos llevar que en este momento ya no nos manda error y nos manda el mensaje la variable Persona
1 no apunta a ningún objeto.
Si ponemos entre comentarios esta línea guardamos cambios y ejecutamos podemos observar que en este
caso la persona 1 aún continúa apuntando al objeto creado.
En esta línea de código y por lo tanto podemos acceder al valor de Juan así que con esto podemos entender
cómo es que funciona la palabra reservada Null la cual significa ausencia de valor o que la variable
no está apuntando a ningún objeto y cuando queramos atributos de nuestras clases por ejemplo en este
caso el atributo de nombre de la clase persona.
Su valor por default va a ser nulo así que no es necesario crear el atributo y además especificar igual
a NULL ya que este va a ser su valor por default así que no vamos a asignar valores por default normalmente
sino que vamos a saber que cualquier tipo objeto en Java su valor por default es nulo y si fuera por
ejemplo de tipo entero.
Al ser un tipo primitivo su valor normalmente en tipos numéricos es cero pero eso es sólo para que entiendan
que se le asigna siempre un valor por default a los atributos de nuestras clases y en este caso si es
de tipo obvie como es el tipo string entonces su valor por default va a ser nulo.
Y básicamente lo que va a significar es que tenemos ausencia de valor.
Estos atributos no están apuntando a ningún objeto en este caso apuntan a un objeto y por eso creamos
este constructor en esta clase persona para que en este momento la variable nombre apuntará a un objeto
de tipo string y ese objeto de tipo string se creó en este momento.
Sin embargo debido a que el tipo string es de los más utilizados en Java no es necesario utilizar el
constructor Niu string
y le pasamos la cadena.
Esto en Java no es necesario no tenemos que utilizar Niu para crear un nuevo objeto de tipo string pero
podemos observar que esta sintaxis funciona sin ningún problema así que realmente lo que está haciendo
detrás el compilador de java sí es crear un nuevo objeto de tipo string pero no es necesario simplemente
si ponemos doble comilla y el valor de nuestra cadena.
Esto en automático crea un nuevo objeto de tipo string así que al momento de mandar a llamar el constructor
de nuestra clase está recibiendo un nuevo objeto y cambia el valor de ese atributo de tener el valor
de Null pasa a tener el valor de nuestra cadena de Juan.
Esto al momento de crear el objeto persona bien vamos a ejecutar paso a paso para que vean esto ponemos
un punto de ruptura.
Damos clic derecho y posteriormente de Buffalo si presionamos F8 podemos observar que la variable Persona
1 en este momento ya está apuntando a un objeto de tipo persona y si revisamos cuál es el valor podemos
observar que la referencia que está almacenando es un objeto con terminación 2 37.
Vamos a continuar y ahora esta misma referencia 2 37 se la vamos a asignar a la variable persona 2 que
estamos creando.
En esta línea de código así que ahora tanto la variable persona 1 como la variable persona 2 apuntan
al mismo objeto el que se encuentra en la posición de memoria con terminación 2 37.
Si tratamos de acceder a su atributo vamos a poder acceder al valor de Juan así que en ambos casos estamos
accediendo al valor de Juan debido a que apuntan al mismo objeto presionamos F8 y de nueva cuenta F8
y en este momento la variable Persona 1 ya no apunta al objeto que se ha creado.
En esta línea de código podemos observar que cambió el objeto persona 1 ya no tiene un tipo asignado
y su valor es igual a NULL y el objeto persona 2 todavía apunta al objeto de tipo Persona 2 y si accedemos
al valor de atributo de nombre podemos acceder todavía al valor de Juan y por ello es que en este caso
podemos comprobar podemos preguntar si la persona 1 es diferente de Null entonces que acceda al nombre.
De lo contrario ya no deberíamos acceder a los atributos o métodos del objeto persona debido a que nos
va a marcar no Painter exception así que vamos a verificar si presionamos F8 podemos observar que nos
vamos al ELS debido a que la persona 1 su valor es igual a NULL y si presionamos F8 termina la discusión
de nuestro programa y nos manda el mensaje la verdad del Persona 1 no apunta a ningún objeto presionamos
F8 y termina la ejecución de nuestro programa.
Un comentario más es que por ejemplo si en esta última línea de código ponemos que la variable Persona
2 también la asignamos el valor de Null entonces el objeto en esta línea de código es candidato a eliminarse
de la memoria así que podríamos mandar a llamar.
El método de la clase System y el método garbage collector GS y si mandamos a llamar este método en
cuanto le sea posible se va a ejecutar el recolector de basura y entonces va a buscar los objetos que
ya no tengan ninguna referencia así que en este momento este objeto que se ha creado en esta línea de
código.
Al llegar a este punto tanto la variable Persona 1 ya no está apuntando al objeto y tampoco la variable
personados así que este objeto ya no está siendo referenciado por ninguna variable.
Básicamente sucedió esto tenemos nuestra clase persona.
Posteriormente se creó el objeto en esta línea de código.
Posteriormente la variable Persona 1 estaba apuntando a este objeto.
En esta línea la persona 2 apunta a este objeto y posteriormente en esta línea de código se rompe esta
referencia.
Esta variable Persona 1 ya no apunta a este objeto sino que contiene ahora el valor de Null y en esta
línea de código también la variable Persona 2 ya no apunta al objeto.
Por lo tanto como este objeto ya no está siendo apuntado por ninguna variable es candidato a eliminarse
de la memoria de IAVA y este método lo que va a hacer es que va a escanear todos los objetos que se
han creado en memoria y los va a eliminar los va a quitar de la memoria.
Sin embargo este método únicamente podemos planificarlo podemos hacer la llamada pero esto no garantiza
que se ejecute el recolector de basura ya que es un proceso muy pesado y únicamente se va a ejecutar
en cuanto le sea posible a la máquina virtual ya que la máquina virtual es quien se va a encargar de
ejecutar el recolector de basura así que ponemos el mensaje.
Este es el Garba colector el recolector de basura pero sólo podemos planificar la llamada para recolectar
objetos que ya no están siendo apuntados por ninguna variable esto no es una práctica común pero si
los queremos comentar ya que es incluso un tema de certificación así que debemos de saber en qué momento
los objetos ya son candidatos a eliminarse de la memoria y si mandamos a llamar.
El método Garba es colector entonces no significa que se va a ejecutar de manera inmediata sino que
hasta que la máquina virtual pueda ejecutar este proceso es que va a ejecutarlo y se van a eliminar
de la memoria los objetos que ya no están siendo referenciados por ninguna variable.
Eso es todo por esta elección y nos vemos en el siguiente video.
Saludos.