Está en la página 1de 11

El paquete java.

lang

Vamos a hacer un pequeño overview sobre los temas que hemos visto hasta el momento.
Hemos visto que, así como a nivel del sistema operativo organizamos nuestros archivos en
carpetas, en folders, y creamos una estructura jerárquica de cómo están organizados, en Java,
esto se llama paquetes, es una estructura de paquetes.

[00:24] ¿Y qué es un paquete? Básicamente un paquete es un contenedor de archivos o de


otros paquetes también, sobre el cual vamos pues a tener cierta jerarquía, como por ejemplo
puede ser en el caso de aquí, que tenemos, pues com.bytebank.modelo para expresar la
jerarquía que tenemos a nivel de compañía, nombre de la empresa y modelo.

Esta es una convención que se creó para poder organizar nuestros paquetes y evitar tener
clases con el mismo nombre. ¿Por qué clases con el mismo nombre? Volvemos otra vez a uno
de los temas de la clase anterior, porque el nombre de la clase, el nombre real, está compuesto
por el paquete y el nombre del archivo.

que si yo deseo usar el administrador en algún otro paquete o bueno, el gerente, cualquier
clase de un paquete en otro paquete, tengo dos opciones: o copio el nombre completo de esa
clase, que en este caso es com.bytebank.modelo.Gerente, que es el qualified name, el nombre
calificado entero de esta clase, o tengo también el otro camino que es simplemente usar los
imports.

[01:44] Import com.bytebank.modelo.CuentaAhorros; Entonces, dependiendo de esto, yo


podría también importar todos los archivos de un solo paquete usando el comodín asterisco,
vemos que el código sigue compilando y no hay ningún problema, pero dependiendo de los
casos hay veces que es mejor importar directamente la clase.

Ahora, si somos un poco más curiosos, tenemos aquí una clase system. Acá tenemos una clase
System también, y esta clase system, ¿qué es lo que nos dice? Vamos a ver que aquí el Java.doc
nos está diciendo, java.lang.System, ese es el nombre calificado de esta clase java.lang.System.

[03:00] Entonces, ¿debería importar esta clase java.lang.System.? No la veo aquí en la sección
de los imports. Recuerden que primero es la sección de paquetes, imports e implementación
de la clase. Pero aquí yo no veo en ninguna parte de dónde estamos importando system.
[03:20] Otro caso está acá string. Yo no veo de donde yo estoy importando la clase string, sin
embargo acá me dice java.lang.String. ¿De dónde es que yo estoy obteniendo estas clases si a
nivel de mi archivo yo no las estoy declarando explícitamente, ni a nivel de import ni a nivel
de su nombre cualificado?

Explorando String
Habíamos visto ya que si yo necesitaba usar una clase en un paquete externo,
a donde este está localizado, necesitaba ir por dos caminos: o escribir el
nombre completo de esa clase o importar esa clase. ¿Cuál fue el detalle que
acabamos de notar? Que para la clase string y para la clase system yo no
necesito ir por ninguno de esos dos caminos.
Entonces vamos a comenzar primero sobre la clase string, vamos a vamos a
explorar un poco esta clase string. Para esto yo voy a crear aquí un test, aquí
voy a new class y voy a darle TestString. Le voy a dar finish. Y tengo mi clase
común y corriente con un método main ahí adentro. Perfecto, nada que no
sepamos de memoria hasta el momento.

Y voy a crear un string, voy a comenzar a explorando qué objeto es string. A


ver. A ver, si yo pongo string, "Ctrl + espacio", vemos que aquí, en la segunda
opción, él ya me está dando la opción de importar ese string, pero si yo le doy
enter, en efecto, viene el string, pero no hay ningún import. Interesante.
Cuando tú creas directamente de una clase, creas una instancia, y mandas eso
a una referencia en la memoria, estos conceptos ya los hemos visto en los
cursos anteriores, vemos que yo necesito hacer un new, un new sobre el objeto
que estoy creando para referenciar la instancia a ese nuevo objeto.

Pero en string, yo directamente le estoy


asignando un valor literal, le estoy diciendo String nombre = "Alura", igual
palabra. Esto es un comportamiento exclusivo del string. ¿Por qué? Tenemos
ya dos tipos de datos primitivos, que ya los hemos ido viendo en el camino de
los cursos anteriores, como int, double, char, byte.
Pero string no es un tipo de dato, como en otros lenguajes de programación,
que de repente es un bar, un val, algo por el estilo, pero en este caso string es
un objeto. Y yo puedo directamente crear una instancia de ese objeto
apuntando a un literal.
¿Qué quiere decir eso?

El primer camino, que es el


nunca usado, es crear directamente, instanciar un string y crear la referencia al
objeto string como objeto.

[03:34] Pero como Java sabe que no es muy práctico hacerlo de esta forma,
llamar al constructor de string, pasarle un parámetro, para que al final sea
referencia en una palabra, Java nos da esta sintaxis mucho más directa para
poder ver cuál es el valor del string, Esta forma de acá no es usada. Vamos a
comentarlo aquí. No utilizada en el mundo real. Pero existe.

Porque es la que ahora sigue vigente. La clase string no ha cambiado desde el


2007 hasta el momento, pero si deseamos una documentación un poco más
actual, tenemos también entonces el string de la versión 11 del JDK.

El package, acá nos está diciendo, el paquete donde está la clase string
contenida es java.lang.

[05:59] Pero vimos aquí que yo no necesito importar nada de java.lang. ¿Y


esto por qué es? Porque java.lang hace referencia directa a Java language,
lenguaje Java, y es como que el paquete base sobre el cual vamos a traer todos
los objetos que necesitamos para poder construir alguna aplicación, es como la
base de todo.
si yo necesitara importar Java.lang en todas las clases que yo voy a escribir, es algo muy
redundante, es algo que no es nada práctico. Y recordemos que Java se enfocar bastante en
seguir las buenas prácticas de programación: código no redundante, código que refleje lo que
tu negocio quiere hacer y código legible y ordenado.

[06:50] ¿Entonces qué es lo que hace Java? Java disponibiliza todos los archivos de la clase
java.lang en cualquier paquete que tú lo quieras usar, sin necesidad de que tengas que
importarlo explícitamente o llamarlo a través del nombre completo, como podría ser, por
ejemplo java.lang.

Métodos:

No cambio

tamp
oco

¿Entonces es que la librería de Java no funciona? No es así. Este concepto es


la base del string y es lo más importante que tienen que aprender sobre esta
clase, es inmutabilidad. ¿Qué quiere decir inmutabilidad?

[12:14] El string nace y nunca más es modificado hasta el momento en que es


recolectado por el garbage collector.
El string nace y muere de la misma forma, nunca más, nunca más es
modificado o alterado, de ninguna forma. Imposible. Entonces yo puedo
decirle aquí un replace concat que haga lo que yo necesite, pero yo nunca voy
a modificar directamente este string.

¿Entonces, cómo puedo modificar el string? Lo que se hace normalmente, u


ejemplo claro puede ser volver a asignar este valor a la misma variable. Esa es
una de las formas. Tenemos otras clases llamadas string builder, eso, pero ya
es parte de algo un poco más avanzado. Por ahora vamos a aprender de esta
forma.

abemos que nombre es igual a nombre.replace y la letra. Entonces el valor que


nos devuelve este método, el método replace, entramos acá y vemos que él
devuelve un string, entonces, ese valor que replace devuelve, yo lo voy a
almacenar en la variable nombre. ¿Para qué? Para que el string y nuevo que se
va a crear aquí se ha almacenado en la misma variable.

Todo string es inmutable, así como lo creas, muere.


Metodos String
Vamos a conocer y vamos a jugar un poco más con los métodos que hay aquí
dentro de esta clase.
El string me permite también, por ejemplo, transformar todas las letras a
mayúsculas.

podemos ir entrando, entrando, entrando y profundizando mucho más en


cómo es que funciona la clase string. Aquí vemos el algoritmo que él tiene
implementado para saber cómo es que funciona.
Los algoritmos en sí no son tomados en el examen de certificación, pero es
bueno saber a veces algoritmos de ordenamiento, todo esto. Ese es un tema
muy aparte.

Yo puedo hacer un nombre = nombre.toLowerCase(). ¿Qué es toLowerCase?


Él simplemente va a transformar todo ese string a minúsculas
automáticamente.

Entonces tengo aquí char letra = nombre.chartAt(3); ¿Qué significa


nuevamente? Nombre, punto, devuélveme el caracter en la posición número
3.

¿Y qué pasaría si yo le digo "tráeme el caracter en la posición 5"? Por ejemplo


aquí, 5. Sabemos que yo tengo L0, E1, T2, R3, A4. ¿Y qué hay en el 5? acabó
el string, no hay nada.

[05:05] ¿Qué debería hacer string en este caso? Ejecutamos y él no me va a


traer absolutamente nada porque no hay nada en la posición 5.
Vamos a ver qué es lo que me retorna este valor, porque si yo tengo un Alura
cursos online, online, e al final, debería retornar a alguna cosa. Entonces
("Indice encontrado: " + indice); guardamos, ejecutamos y mira: Indice
encontrado: 18. O sea, él encontró el índice final del string Alura cursos
online y me dice: "Esa letra se encuentra en el número 18".

[06:34] Pero aquí, en el indexOf, hay una cosa curiosa. ¿Y cuál es? Que yo
tengo uno, dos, tres, cuatro indexOf. Es curioso. ¿Entonces qué significa esto?
Este método indexOf está sobrecargado. Yo tengo muchas formas de usar este
indexOf. La más usada es esta de aquí, pero también pueden ir explorando las
demás opciones de indexOf.

[07:02] Y si quieren conocer cómo funciona el método en sí, apretamos, "Ctrl


+ clic", y entramos automáticamente. Miren, tenemos aquí el javaDoc que ya
lo hemos visto, nos dice que retorna el índice donde la primera coincidencia
con el string está llegando con el substring. Perfecto.

Si coder, string.coder, etcétera, toda una lógica interna de Java. Este ya es el


código propio de Java, es el código que Java nos da, nos provee para nosotros,
sobre esta funcionalidad que ya existe, comenzar también a trabajar
directamente y no reinventar la rueda.
Entonces practiquen mucho de estos métodos, recuerden que siempre tienen
que asignar el valor retornado a una nueva variable o a una variable ya
existente para almacenar el string nuevo que es creado, porque todo string por
naturaleza es fijo, inmutable.

La clase StringBuilder
En este pequeño ejemplo ya hemos creado varios objetos, solo porque estamos
concatenando algunos String. Esto no es bueno pensando en el rendimiento y
para resolver esto existe la clase StringBuilder que ayuda a concatenar Strings
de manera más eficiente.

Vea el mismo código usando StringBuilder:

StringBuilder es una clase común. Observe que usamos new para crear el
objeto. Además, como el objeto es mutable, usamos la misma referencia,
sin nuevas asignaciones.
Practique un poco más y pruebe otros métodos de la clase String como
isEmpty, trim, contains o split. Para hacer esto, verifique el javadoc:
https://docs.oracle.com/javase/10/docs/api/java/lang/String.html.

También podría gustarte