20241216 POO-Clases-STATIC-JAR - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Bueno, pues si uno ha hecho, Adrián Alonso, cállate. Vale, pues si uno, es Adrián Alonso, pues eso, si uno ha hecho estas funciones tan estupendas que le han llevado tantísimo tiempo, es para que la gente las use, para distribuirlas en internet o para usarlas nosotros mismos en nuestros proyectos.
00:00:00
pero bueno, realmente
00:00:26
a ver, esto nadie
00:00:27
nos lo va a comprar y nosotros mismos no lo vamos
00:00:30
a usar, vamos a hacer
00:00:32
una clase con métodos estáticos
00:00:33
que si nos sea útil
00:00:35
a lo mejor y que si
00:00:37
podamos usar
00:00:40
pues
00:00:40
estamos todo el rato leyendo el teclado
00:00:43
y es un rollo patatero
00:00:46
porque tenemos que hacer la clase scanner
00:00:47
quitar los next lines
00:00:49
si he leído un número y luego no sé qué
00:00:51
pues mira, vamos a hacernos ya que estamos
00:00:53
una clase con métodos estáticos
00:00:55
para leer entero, leer decimal, leer cadena
00:00:58
y ya está
00:01:01
y esa clase la importamos
00:01:02
desde cualquier proyecto que estemos haciendo
00:01:05
eso que implicará que ya nos olvidamos
00:01:07
del escáner, nos olvidamos de la madre que lo trajo
00:01:09
ya, pero no tienes que escribir escáner todo el rato
00:01:11
tú llamas a un método y punto, pelota
00:01:15
te olvidas del escáner
00:01:17
te olvidas de
00:01:19
a ver, vamos a hacer
00:01:20
un método, vamos a hacer
00:01:25
una clase con métodos
00:01:27
estáticos útiles
00:01:29
para cualquier otro proyecto
00:01:31
de los míos y ahora
00:01:33
vamos a ver cómo lo puedo yo exportar
00:01:35
e importar desde cualquier otro proyecto para usarlo
00:01:37
porque en el ejemplo que hemos visto
00:01:40
antes, como estábamos
00:01:41
en el mismo proyecto, aquí no había
00:01:43
ningún problema, yo desde mi main
00:01:45
aunque estaba en otro paquete
00:01:47
aunque estaba en otro paquete
00:01:48
yo usaba la clase sin más
00:01:50
con el nombre del paquete
00:01:53
pero si estuviera en otro proyecto
00:01:54
esto no podría hacerlo
00:01:56
esto solo podría hacerlo
00:01:57
desde paquetes de la misma clase
00:01:59
de la misma proyecto
00:02:03
pues venga, vamos a hacernos aquí
00:02:04
otro paquete
00:02:06
venga, dentro de matemáticas
00:02:10
vamos a hacernos un paquete
00:02:15
que se llame pues
00:02:16
consola, por ejemplo
00:02:19
porque van a ser utilidades de consola
00:02:20
un paquete
00:02:23
consola y ahora vamos
00:02:25
a hacer una clase con esos
00:02:27
métodos, esa clase
00:02:29
por ejemplo que se llame
00:02:33
leer
00:02:34
por ejemplo
00:02:36
porque es una clase con métodos
00:02:39
para leer por consola
00:02:41
pues venga, vamos a hacer
00:02:43
como haríamos un método
00:02:45
le vamos a poner ya al public porque ya hemos avanzado
00:02:46
que la idea es usarlo desde, por supuesto
00:02:49
fuera de ese paquete
00:02:51
un método
00:02:52
que me lea del teclado una cadena
00:02:54
y me la devuelva como
00:02:56
valor de retorno
00:02:58
bueno pues este método
00:03:00
sería, nos hacemos nuestro
00:03:02
escáner, aquí como mi
00:03:04
variable local
00:03:06
y ahora, pues ahora ya
00:03:07
puedo hacerme esto
00:03:18
¿verdad?
00:03:20
o sea este método me lee
00:03:34
una cadena del teclado
00:03:36
Y de hecho hasta
00:03:38
Podría no tener que arrastrar
00:03:41
Los system out
00:03:44
Pues yo que sé, podríamos hacer
00:03:45
Vamos a probar
00:03:47
Introduzca
00:03:50
Cadena de texto
00:03:53
Cadena de texto
00:03:55
Ala
00:04:01
Pues este método
00:04:02
Me dice introduzca cadena de texto
00:04:04
Se queda esperando a que yo meta una cadena de texto
00:04:06
Y cuando yo la he metido me la devuelve
00:04:09
Como valor de retorno
00:04:11
Aquí ya veis que ya empezamos a entender
00:04:12
Lo que estamos haciendo
00:04:19
Scan es un objeto de la clase Scanner
00:04:20
Al que efectivamente he instanciado con el constructor
00:04:25
Ya entendemos las cosas que hacíamos
00:04:29
El constructor de Scanner necesita el qué
00:04:31
El sitio al que se va a enganchar el Scanner
00:04:35
Sistening que es la consola
00:04:37
next line ¿qué es?
00:04:40
next line es un método de la clase
00:04:42
escáner, no estático por supuesto
00:04:44
porque lo llamo asociado a un objeto scan
00:04:46
next line es un método, ¿qué es lo que hace ese
00:04:48
método? pues si no se mete a ver cómo está programado
00:04:50
por dentro, pues se quedará esperando
00:04:52
y cuando tú le metes algo te lo devuelve
00:04:54
entonces ya las cosas que hemos
00:04:56
escrito toda la vida ya cobran sentido
00:04:58
vale, vamos a hacer ahora un método
00:05:00
para leer un entero, por ejemplo
00:05:02
entero
00:05:04
y este me va a devolver un int
00:05:11
y ahora cambiamos el mensaje
00:05:13
introduzca
00:05:15
número
00:05:17
entero
00:05:20
y ahora en lugar de con next line
00:05:22
pues lo leemos con next int
00:05:26
claro, y vamos a hacernos un método
00:05:27
para un decimal
00:05:32
que son las tres cosas que leemos habitualmente
00:05:34
o dabble
00:05:37
dabble para que tenga más
00:05:42
precisión
00:05:44
No sé, a mí me
00:05:45
Me cae mal
00:05:49
Vale, introduzca número decimal
00:05:51
Y ahora scan next double
00:05:54
Vale, pues si yo pudiera
00:05:58
Usar estos métodos desde cualquier sitio
00:06:03
Cuando tengo que leer una cadena
00:06:05
Pondría leer punto cadena
00:06:07
Y me olvidaría de hacer el escáner en mi proyecto
00:06:08
Me olvidaría de todo
00:06:11
Cuando tengo que leer un entero, pondría
00:06:12
Leer punto entero
00:06:14
¿Verdad?
00:06:16
Sí. No, súper mentira, porque no he puesto
00:06:19
un static, con lo cual nunca podría hacerlo así.
00:06:21
Si quiero hacerlo así, tendría
00:06:23
que poner un static. Nos han mentido, profesor.
00:06:25
No, es que se me ha olvidado poner static.
00:06:26
Vale, ahora ya sí. Estos métodos
00:06:31
son static y pueden serlo, no tienen ningún
00:06:33
problema, porque no dependen de ninguna propiedad
00:06:35
de la clase. Porque de hecho la clase
00:06:37
no tiene propiedades. Eso es.
00:06:39
Vale, pues yo ahora
00:06:42
desde cualquier...
00:06:43
Ahora a mí
00:06:47
me encantaría, cada vez que quiera leer
00:06:47
algo de esto, poner leer.cadena
00:06:51
y ya está, y me olvido de hacer el escáner
00:06:52
leer.entero y ya está, me olvido de hacer el escáner
00:06:55
vale, entonces desde otras
00:06:57
clases de mi mismo proyecto
00:06:59
está claro, no tengo ningún
00:07:01
problema, por ejemplo, pues yo que sé
00:07:03
me voy a hacer aquí en app
00:07:05
de mates, esta
00:07:06
aplicación main, por ejemplo
00:07:08
aquí yo he hecho, en esta aplicación
00:07:10
main que hemos hecho antes para
00:07:13
probar las utilidades matemáticas
00:07:14
cuando tenía que leer el número
00:07:16
me he tenido que hacer un escáner, he hecho el next
00:07:18
in, pues si yo
00:07:20
ahora ya
00:07:22
con esto, podría cambiar esto
00:07:24
me olvido
00:07:26
de tener que hacer el escáner al principio
00:07:28
de todo, me olvido de todo esto
00:07:30
y aquí por ejemplo
00:07:32
no, pero
00:07:35
aquí por ejemplo, ¿qué puedo hacer?
00:07:38
venga, char
00:07:41
op igual a
00:07:42
leer punto
00:07:45
cadena
00:07:46
Y me da la cadena leída
00:07:49
Que luego yo me quedo con el carácter en la primera posición
00:07:50
Pues me quedo, eso ya es problema mío
00:07:54
Vale
00:07:56
He llamado a leer cadena
00:07:57
Eso me va a leer una cadena
00:07:59
Y no tengo que poder escanear ni nada
00:08:01
Ya el método me lo hace todo dentro
00:08:02
Y aquí igual cuando he leído el número
00:08:04
Pues yo podría hacer así
00:08:07
Int num igual a
00:08:09
Leer punto entero
00:08:11
Y ya está
00:08:14
Y aquí lo mismo
00:08:16
Cuando he leído el número
00:08:19
pues me olvido del scan y de todo
00:08:20
¿vale?
00:08:23
entonces yo tengo estos métodos que los uso
00:08:32
cada vez que quiero un entero, cada vez que quiero una cadena
00:08:34
y me despreocupo de escáneres
00:08:36
y de cosas, completamente
00:08:38
y no solo de eso, sino que como podemos comprobar
00:08:39
me despreocupo del salto de línea
00:08:41
que se ha quedado de tener que eliminarlo
00:08:44
porque el escáner es una variable local que aparece
00:08:46
y desaparece, luego se le elimina
00:08:48
todo lo que tenga en el buffer
00:08:50
no es como aquí
00:08:51
que tengo un escáner compartido por todos
00:08:54
vale, pues igual que es útil
00:08:56
para clases de mi mismo proyecto
00:08:59
utilísimo si lo puedo usar ya
00:09:00
en cualquier otro proyecto que yo tenga
00:09:03
que yo empiece de nuevas, lo uso
00:09:04
y ya me olvido del escáner y de todo
00:09:07
pregunta
00:09:08
¿por qué esto que es más cómodo
00:09:08
no es lo que te dejan importar?
00:09:13
¿por qué la clase escáner no hace esto directamente?
00:09:17
bueno, la clase escáner lo hace con Slime
00:09:21
pero que tenga un método exacto para esto
00:09:23
que te abre tercero el escáner
00:09:25
bueno, a ver, te ofrece
00:09:26
Scanner y tú lo usas como quieras
00:09:30
pero no puede cerrarse a sí mismo tampoco
00:09:32
claro, pero hay que estar pendiente de cerrarlo
00:09:33
y esto no, porque esto lo usas y
00:09:36
automáticamente desaparece
00:09:37
ya, pero a ver
00:09:40
o sea, me refieres, ¿por qué no hay una
00:09:42
utilidad añadida que
00:09:44
es más cómodo
00:09:45
al final y es igual
00:09:48
bueno, a ver, tú tienes varias
00:09:49
clases de entrada y salida
00:09:52
no, a ver, es
00:09:53
escáner se acopla al teclado
00:09:57
y te lee cosas, y luego tú lo usas como quieras
00:10:01
pues que lo quieres meter en
00:10:03
bueno, pues entonces
00:10:04
vale, pues entonces nosotros, esta clase
00:10:07
nos encantaría usarla desde cualquier otro proyecto
00:10:11
para ya cada vez que tengamos que leer del teclado
00:10:13
usarla sin más, pero efectivamente
00:10:15
si yo ahora me hago un proyecto nuevo
00:10:17
vamos a hacer un proyecto nuevo
00:10:19
pues para hacer cualquier cosita
00:10:22
Proyecto prueba
00:10:24
Porque este no es solamente para hacer la prueba
00:10:29
Y lo voy a subir ni nada
00:10:31
Pues haga
00:10:32
Me hago este proyecto de prueba por aquí
00:10:34
Y me voy a hacer
00:10:37
Pues una aplicación
00:10:40
Aquí en mi paquete main
00:10:41
Me voy a hacer
00:10:45
Una clase main
00:10:47
Y ahora pues resulta que yo aquí
00:10:48
Pues quiero hacer cosas y entre ellas me interesa
00:10:55
Pues leer un número entero por ejemplo
00:10:57
Entonces claro
00:10:58
A mi me encantaría pues poder llamar
00:11:00
A el paquete que se llamaba
00:11:03
Consola
00:11:05
Punto, pues leer
00:11:05
Y ahora punto, pues entero
00:11:08
Por ejemplo, y esto me
00:11:10
Leería un numerito entero
00:11:12
¿Vale?
00:11:15
Pero esta ruta, para este proyecto
00:11:19
No pinta nada, no es nadie
00:11:21
Porque el paquete consola
00:11:23
Está en otro sitio
00:11:25
Está
00:11:27
No, no, no
00:11:28
¿Vale?
00:11:34
Está aquí, está en nuestro proyecto.
00:11:36
Está aquí.
00:11:40
Consola está aquí.
00:11:42
Consola es un paquete.
00:11:44
Consola es un paquete que está aquí,
00:11:52
que tiene leer.
00:11:54
Entonces, consola.leer
00:11:55
tiene sentido aquí dentro
00:11:57
de este proyecto matemáticas.
00:11:59
Aquí dentro tiene sentido consola.leer.
00:12:01
Pero aquí en otro proyecto,
00:12:04
que es otro proyecto distinto,
00:12:05
claro, pero te tienen que haber dado el código fuente
00:12:07
es que yo no te voy a dar el código fuente
00:12:14
claro, no vaya a ser que te dé el código fuente
00:12:16
y me piratees el código
00:12:22
y te haga rico a mi costa
00:12:23
vale, entonces está claro
00:12:26
que desde este proyecto, que no tiene nada que ver con este
00:12:29
aquí, consola.leer
00:12:32
no es nadie
00:12:34
consola.leer es alguien aquí en este
00:12:35
consola.leer es alguien aquí
00:12:39
pero aquí no es nadie
00:12:41
vale, pues entonces ¿qué hacemos?
00:12:42
pero yo aún así quiero que usen mi código
00:12:45
y quiero distribuirlo
00:12:46
por eso me lo voy a decir a la gente, oye, copia y pega
00:12:47
eso es muy cutre, me lo voy a decir eso
00:12:50
entonces ¿qué hago?
00:12:52
voy a exportar este paquetillo
00:12:54
lo voy a exportar a un hard
00:12:56
porque un hard es la manera en la que se distribuyen
00:12:58
las aplicaciones java
00:13:01
me da igual que sean clases de librería
00:13:03
clases con método main como ya hicimos
00:13:04
el otro día, es la manera en la que se distribuyen
00:13:07
las clases, pues venga
00:13:09
hacemos aquí en matemáticas, que es donde estaba
00:13:11
ese paquete, export
00:13:13
en hard, ahora nada
00:13:14
de runable, porque lo que
00:13:17
yo voy a exportar no son clases con método
00:13:19
main, no son aplicaciones para ejecutarse
00:13:21
con main, lo que yo voy a
00:13:23
exportar
00:13:26
son clases sin más
00:13:27
clases sin más, pues entonces
00:13:29
marco hard, esto no es una
00:13:31
aplicación ejecutable
00:13:33
vale, pues hard, y ahora que me dice
00:13:34
vale, sí, pero
00:13:37
si fuera capaz de verlo, me dice
00:13:38
pero que quieres exportar realmente
00:13:41
pues marco aquí todo
00:13:43
no, yo quiero el paquete solo este, es que aquí está
00:13:45
tan mínimo que no lo veo
00:13:47
marco consola solo, vale
00:13:48
quiero exportar solo consola
00:13:51
es que eso yo quiero
00:13:52
solo quiero mi clase de leer que está en consola
00:13:55
solo quiero esa, ah, bueno
00:13:57
vale
00:14:03
en consola, que quiero exportar, todo, solo dejas
00:14:03
hay todo, ¿vale?
00:14:06
Vale, entonces aquí te dice
00:14:08
¿quieres exportar también el código
00:14:10
fuente? Hombre, si eres muy
00:14:12
generoso, pero no lo vamos a exportar.
00:14:14
No, que se joda.
00:14:16
Vamos a exportar el código fuente.
00:14:18
Y ahora, ¿a qué
00:14:21
jar lo quieres exportar?
00:14:22
Bueno, al que nos dé la gana. Venga,
00:14:24
llamadlo como queráis, ¿vale?
00:14:26
Yo lo tengo ahí llamado en el escritorio
00:14:28
para encontrarlo rápido.
00:14:30
¿Vale?
00:14:32
Yo lo tengo aquí para
00:14:36
encontrarlo rapidito, lo tengo en el escritorio
00:14:37
teclado.jar
00:14:39
vale, exportame eso
00:14:40
el paquete este de aquí
00:14:43
consola, que no sé muy bien lo que estoy
00:14:45
exportando porque no lo veo, pero vamos
00:14:47
estará exportando todo bien, lo que hay dentro
00:14:49
teclado, ala, next
00:14:51
todo esto lo dejamos por
00:14:53
defecto
00:14:55
y next, todo por
00:14:56
defecto
00:15:03
y finish, vale
00:15:04
ala
00:15:07
pues mi
00:15:10
jar está aquí.
00:15:13
Esto no es una cosa que se puede ejecutar.
00:15:16
No tiene un método main. No es una clase que
00:15:18
tenga un método main. Esto tiene una clase
00:15:20
con métodos estáticos. No es
00:15:22
algo para ejecutar.
00:15:24
Claro, ¿para qué me sirve a mí este teclado
00:15:26
.jar? Pues yo ahora estoy en
00:15:28
cualquier proyecto y digo, oye, me
00:15:30
interesan las clases que hay en este jar. Me interesan.
00:15:32
Pues voy a
00:15:35
importarlas. Entonces
00:15:36
alguien me tiene que haber dado físicamente
00:15:38
este jar con sus clases. O
00:15:40
Yo lo he descargado de internet o de donde sea.
00:15:42
O lo he cogido de un repositorio.
00:15:44
Pero una vez que ya lo tengo,
00:15:46
ahora ya yo me voy a mi proyecto.
00:15:48
¿En qué proyecto estaba yo
00:15:51
en el que quería usar estas clases?
00:15:52
Pues estaba en mi proyecto, proyecto prueba.
00:15:54
Pues ahora me voy al
00:15:57
botón derecho.
00:15:58
Eso, muy bien.
00:16:01
Me voy
00:16:05
al botón derecho.
00:16:06
Y de import, nada.
00:16:07
Que eso es muy listo. Me voy a
00:16:09
build path.
00:16:11
Y me voy a
00:16:13
Configure BillPath
00:16:15
A ver, puedo ir por muchos camiones al mismo sitio
00:16:16
Pero es el que más entendemos
00:16:19
No hay una carpeta física en el explorador
00:16:20
Donde se pueda meter ese hack
00:16:22
Que la detecte quién
00:16:23
Pero eso tendrás que decirle
00:16:26
Él no detecta todos los hacks que hay en el mundo
00:16:30
Lo tendrás que decir
00:16:32
Pero tendrás que decírselo
00:16:33
Que es lo que estamos haciendo
00:16:36
¿Cómo que si no tiene un pad?
00:16:37
Hombre, Java tendrá un pad por defecto
00:16:40
Donde tendrá todas las clases guardadas
00:16:42
Java no, los proyectos de Java
00:16:43
Eclipse tendrá un
00:16:46
path de donde buscará
00:16:48
para los proyectos, para las claves que usas
00:16:49
No, tiene uno para cada
00:16:52
proyecto, y tú en cada proyecto lo fijas
00:16:54
y lo estamos fijando con esto
00:16:56
Claro, es lo que vamos a hacer ahora
00:16:57
Pero pensaba que tenía uno común
00:16:59
No, no, no, no, no, no, cada aplicación
00:17:01
Java lleva su propio path
00:17:03
Cada vez que construyes un proyecto te crea
00:17:05
un directorio con todas las
00:17:07
con un montón de librerías
00:17:09
que se pueden utilizar como
00:17:11
a ver, si tú
00:17:13
a ver, las librerías
00:17:15
que están dentro de la JRE
00:17:17
esas sí están en un
00:17:19
claro, pero tú tendrías que meter
00:17:21
teclado.jar dentro de las del JRE
00:17:22
si lo metes dentro, sí
00:17:25
pero lo que no puedes es
00:17:27
meterlo en otra carpeta y decir esto es por defecto para todas
00:17:29
porque cada proyecto tiene que conseguir
00:17:31
el suyo propio
00:17:33
a ver, si tú la metes, el teclado.jar
00:17:33
lo metes dentro de la JRE
00:17:39
pero tienes que irte al directorio JRE
00:17:40
comprimirlo en la manera que el JR
00:17:43
y meterlo ahí, entonces sí
00:17:45
pero claro, no es lo que hacemos, la JR nunca la tocamos
00:17:46
de esa manera, nunca se toca la JR
00:17:49
vale, entonces ahora
00:17:51
venga, pues a ver
00:17:53
nosotros vamos, botón derecho del proyecto
00:17:55
configure buildpad
00:17:57
¿qué hacemos cuando entramos en
00:17:59
configure buildpad?
00:18:01
pues le estamos diciendo
00:18:03
¿dónde puede él encontrar
00:18:05
clases? normalmente
00:18:07
él puede encontrar clases
00:18:09
en el raíz del proyecto y en
00:18:10
todos los paquetes que te da por debajo.
00:18:13
Entonces, cada vez que hacemos un paquete,
00:18:15
añadimos a esa RU, a ese ClassPad,
00:18:17
llamémoslo, aunque no quiero meterme en esos líos,
00:18:20
al proyecto, a Java, le estamos diciendo,
00:18:22
oye, ojo, que este proyecto puede tener clases en el raíz
00:18:24
y en todas estas carpetas que cuelgan de ti, ¿vale?
00:18:27
Pero teclado.jar no cuelga de ninguna carpeta
00:18:32
dentro del proyecto, no cuelga ninguna dentro.
00:18:35
Entonces, hay que añadir esa ruta al proyecto.
00:18:38
Pues, para eso entramos aquí en Configure Buildpad, ¿vale?
00:18:42
Pues, aquí os metéis en la pestaña esta de librerías, ¿vale?
00:18:47
Y veis, aquí hay una cosita que tiene esa palabra clave que yo
00:18:52
he mencionado sin querer meterme mucho, que es Classpath.
00:18:57
Entonces, ¿qué es el Classpath?
00:19:00
Cada proyecto tiene su Classpath, que repito,
00:19:02
es una variable, una variable de entorno,
00:19:05
que guarda todas las rutas
00:19:07
donde esa aplicación
00:19:10
puede tener clases accesibles.
00:19:12
El Clash Path ahora mismo
00:19:15
al estar vacío
00:19:16
significa que es la ruta por defecto
00:19:17
que es la del propio proyecto
00:19:21
y todos los paquetes que cuelgan de él.
00:19:22
Que eso no hay que meterlo,
00:19:24
es la suya propia.
00:19:26
Y luego aparte tenemos aquí esto
00:19:27
porque esta es común para todos
00:19:29
y las clases que están aquí
00:19:31
son accesibles para todo el mundo.
00:19:32
Pero tendrías que irte aquí dentro.
00:19:35
Creo que decía yo.
00:19:37
Claro, vale.
00:19:38
Sí, pero jamás.
00:19:39
Nunca toques una JRE
00:19:42
porque la máquina virtual
00:19:43
se usa para millones de aplicaciones
00:19:44
de tu ordenador.
00:19:46
Entonces, cualquier modificación
00:19:47
que hagas en ella
00:19:48
tiene mucho peligro.
00:19:49
Curiosidad,
00:19:50
tiene una cosa igual,
00:19:50
un nombre igual.
00:19:51
Claro, no la toques nunca
00:19:52
sobre todo porque
00:19:53
hay una forma más fácil
00:19:54
que es meter ese hard.
00:19:55
Entonces, ¿qué tenemos que hacer ahora?
00:19:58
Decirle al Clashpad,
00:19:59
oye, tú, Clashpad,
00:20:00
que aparte de las clases
00:20:02
que cuelgan de tu propio proyecto,
00:20:04
dime.
00:20:06
Sí, el ClassPass es una variable que tiene cada proyecto, la suya propia, y es una variable que te informa del conjunto de rutas dentro de las cuales puede haber clases que use esa aplicación.
00:20:06
¿Quieres que te lo diga?
00:20:23
El ClassPath es una variable que guarda todas las rutas
00:20:31
en las cuales hay clases
00:20:35
que la aplicación puede usar.
00:20:39
¿Vale?
00:20:46
Vale, pues entonces,
00:20:51
hay una por proyecto.
00:20:52
Cada aplicación Java tiene su propio ClassPath.
00:20:55
y lo podemos editar
00:20:57
por supuesto desde la consola
00:20:59
pero si tenemos un entorno de desarrollo
00:21:01
nos es más fácil editarlo a partir de aquí
00:21:03
properties, configure build path
00:21:05
y entramos aquí en libraries
00:21:07
vale, ahora mismo no tiene nada, que no tenga nada
00:21:08
significa que las únicas
00:21:11
rutas en las que hay clases que la aplicación
00:21:13
puede usar son las propias del proyecto
00:21:15
las suyas propias
00:21:17
el raíz y los paquetes que cuelguen
00:21:19
pero resulta que queremos añadirle
00:21:21
el hard que está fuera del proyecto
00:21:24
de hecho está en el escritorio
00:21:26
se lo queremos añadir y decirle, ojo
00:21:27
que en este jar hay clases que también quiero que uses
00:21:29
ojo, pues entonces
00:21:31
¿qué hacemos?
00:21:33
nos vamos aquí en
00:21:37
le voy a quitar la esta
00:21:39
vale
00:21:42
y ahora veis
00:21:45
vale, pues ahora pincháis classpad
00:21:46
y veis que aquí se abre
00:21:49
un montón de botones
00:21:51
y uno de ellos es, añade un jar
00:21:53
externo, es justo lo que queremos
00:21:55
un JAR que está fuera en el escritorio
00:21:58
que está fuera del proyecto
00:22:00
quiero añadirlo, no significa que lo meta
00:22:01
dentro del proyecto, lo que significa es que
00:22:04
su ruta la agrego al classpath
00:22:05
pero el JAR no lo muevo
00:22:08
el JAR se queda en el escritorio
00:22:10
añado la ruta al classpath
00:22:11
pero o sea que si tú el JAR
00:22:13
por ejemplo lo eliminas, ya quedó grabado aquí
00:22:16
no, no, no, como el JAR lo eliminas
00:22:18
ya quedó grabado, porque lo único que es configurado
00:22:20
en el classpath es la ruta
00:22:22
Entonces, cuando el proyecto no es de usar esa clase,
00:22:23
va a ir a través de la ruta al JAR.
00:22:27
Si el JAR no ha escrito en el escritorio, está jodido.
00:22:29
¿Vale?
00:22:32
Bueno, pues entonces, vamos a añadir un JAR externo.
00:22:33
Le damos a ADE externo al JAR.
00:22:37
Y nos dice, pues dime dónde está A, alma de cántaro.
00:22:39
Pues tú te vas al escritorio, aquí, teclado.jar.
00:22:42
Abrir.
00:22:47
¿Veis?
00:22:48
Ha aparecido aquí debajo.
00:22:48
entonces como veis
00:22:49
lo que hemos añadido es solo la ruta
00:22:52
hemos dicho, oye que este proyecto
00:22:54
tiene derecho a usar
00:22:55
a partir de ahora
00:22:58
a partir de ahora tiene derecho a usar
00:22:59
aparte de la JRE
00:23:01
aparte de las propias clases suyas
00:23:03
a ver, te decides
00:23:05
te vas o te quedas
00:23:08
vale
00:23:08
vale
00:23:11
pues con esto es lo que estamos diciendo
00:23:13
ojo, que este proyecto a partir de ahora
00:23:15
tiene derecho a usar, tres cosas
00:23:17
las clases de la máquina virtual como siempre
00:23:19
por supuesto, System.out, Scanner
00:23:22
String, todas esas que están en la máquina virtual
00:23:24
las suyas propias
00:23:26
que ha hecho él, lógicamente faltaría más
00:23:28
las que ha hecho él dentro de su proyecto
00:23:30
y además las que estén aquí
00:23:31
¿vale?
00:23:34
pues ya está, ya hemos hecho esto, ya le damos
00:23:36
Apply, Close
00:23:38
y se me ha
00:23:39
quitado el rojo, ¿veis que automáticamente
00:23:42
se me ha quitado el rojo? ahora ya
00:23:44
esto es accesible
00:23:46
si miramos lo que ha pasado en mi proyecto
00:23:47
lupa
00:23:51
efectivamente
00:23:54
aparte de JRE
00:23:56
me ha aparecido aquí esto
00:23:58
que me dice
00:23:59
ah mira, tienes acceso a teclado.jar
00:24:02
que está aquí
00:24:05
y si lo despliegas dentro
00:24:05
hasta te informa de las clases que hay dentro
00:24:07
te informa de ellas
00:24:09
pero eso sí, solo tienes el compilado
00:24:10
el fuente no tienes
00:24:14
entonces el tío te ha distribuido su jar
00:24:15
pero tú no sabes cómo ha hecho el código
00:24:17
Pero es que no te hace ninguna falta
00:24:19
¿Vale?
00:24:21
Si yo pincho aquí, de hecho me dice
00:24:23
Uh, lo siento pero
00:24:24
Me dice
00:24:27
No sé
00:24:29
No sé qué es eso
00:24:30
Porque está solo el compilado, o sea, yo no tengo acceso a su código
00:24:32
Pero no lo necesito
00:24:35
Lo único que quiero es usarlo
00:24:36
¿Vale? Y ahora ya
00:24:38
Como ya lo tengo aquí, pues este
00:24:40
Paquete consola me ha aparecido
00:24:42
No es que físicamente esté ahí dentro
00:24:44
Lo que hay es una referencia
00:24:46
a donde está en el
00:24:48
escritorio, ¿vale?
00:24:50
Y ahora yo ya puedo usar esto perfectamente
00:24:52
para leer un entero.
00:24:54
Por ejemplo, vamos a leer una cadena.
00:24:56
Vamos a ver si hemos solucionado
00:24:58
lo del, al ser variable, un segundito, al ser
00:25:00
variable local, vamos a ver
00:25:02
si hemos solucionado lo del salto de
00:25:04
línea. Recordad que el salto de línea nos
00:25:06
ocurría cuando después de leer un número
00:25:08
leíamos una cadena, ¿verdad?
00:25:10
Pues voy a leer un número y voy a leer
00:25:12
ahora una cadena con mi
00:25:14
super librería.
00:25:16
leer.cadena
00:25:17
vale, como veis
00:25:25
mi código es más cómodo
00:25:31
que si tuviera que haber hecho el escáner, luego el
00:25:33
scan next line, pues esto es
00:25:35
más cómodo, que quiero leer un número
00:25:37
leer entero, le quiero una cadena
00:25:38
leer cadena, ya está
00:25:41
vamos a ejecutarlo
00:25:42
venga, primero un numerito entero
00:25:44
¿veis?
00:25:51
y se queda esperando la cadena
00:25:53
no tengo el problema ese de que
00:25:54
el salto de línea después del número
00:25:57
alimenta al otro next
00:25:59
y no porque son independientes
00:26:00
son dos objetos escáner que han desaparecido
00:26:02
vale, entonces
00:26:04
hemos ganado con esto
00:26:06
dos ventajas
00:26:10
dejar de arrastrar el escáner
00:26:11
y
00:26:13
lo del salto de línea famoso
00:26:15
ahora ya
00:26:17
si hacéis eso del build path
00:26:19
con cualquier proyecto
00:26:22
que hagáis, pues podéis usar esta clase para leer
00:26:24
y no tenéis
00:26:26
que acordaros del escáner todo el rato
00:26:28
vale, esto es un ejemplo
00:26:30
en realidad era un ejemplo
00:26:34
de utilidad de los métodos
00:26:35
estáticos, son métodos de librería
00:26:38
métodos que no dependen de propiedades de la clase
00:26:39
los llamo
00:26:42
con el nombre de la clase, con lo cual
00:26:43
es comodísimo, no tengo que crear ningún objeto
00:26:46
lo llamo con el nombre
00:26:47
que los quiero usar en otro proyecto, los exporto con un
00:26:48
jar y luego los importo
00:26:52
ah, sí, dime
00:26:53
- Materias:
- Programación
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado superior
- Primer Curso
- Subido por:
- Raquel G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 9
- Fecha:
- 10 de enero de 2025 - 17:45
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 26′ 59″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 113.58 MBytes